Skip to content

Commit 5d4916d

Browse files
ayy
1 parent aa18125 commit 5d4916d

File tree

2 files changed

+48
-8
lines changed

2 files changed

+48
-8
lines changed

doTheWorld.h

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,7 +1305,7 @@ void DtwTransaction_free(struct DtwTransaction *self);
13051305
#define DTW_RESOURCE_PRIMARY_KEY_CANNOT_HAVE_SUB_RESOURCE 7
13061306
#define DTW_IMPOSSIBLE_TO_RENAME_A_PRIMARY_KEY 8
13071307
#define DTW_RESOURCE_PRIMARY_KEY_CANNOT_HAVE_SUB_SCHEMA 9
1308-
1308+
#define DTW_RESOURCE_RENAMED_RESOURCE_CANNOT_HAVE_SONS 10
13091309
typedef struct {
13101310
DtwTransaction *transaction;
13111311
DtwRandonizer *randonizer;
@@ -1339,6 +1339,7 @@ typedef struct DtwResource{
13391339
bool its_value_folder;
13401340
bool loaded;
13411341
bool is_binary;
1342+
bool were_renamed;
13421343
unsigned char *value_any;
13431344
long value_size;
13441345

@@ -9224,7 +9225,18 @@ void DtwResource_rename(DtwResource *self,const char *new_name){
92249225
);
92259226
return;
92269227
}
9228+
DtwResourceArray *sons =self->sub_resources;
9229+
if(sons->size > 0){
9230+
private_DtwResource_raise_error(
9231+
self,
9232+
DTW_RESOURCE_RENAMED_RESOURCE_CANNOT_HAVE_SONS,
9233+
"you cannot rename a resource with active sons",
9234+
self->name
9235+
);
9236+
return;
9237+
}
92279238

9239+
self->were_renamed = true;
92289240
char *old_path = strdup(self->path);
92299241
free(self->path);
92309242
free(self->name);
@@ -9244,8 +9256,7 @@ void DtwResource_rename(DtwResource *self,const char *new_name){
92449256
else{
92459257
dtw_move_any(old_path,self->path,DTW_NOT_MERGE);
92469258
}
9247-
DtwResourceArray_free(self->sub_resources);
9248-
self->sub_resources = newDtwResourceArray();
9259+
92499260
free(old_path);
92509261

92519262
}
@@ -9973,7 +9984,15 @@ DtwResource * DtwResource_sub_resource(DtwResource *self,const char *format, ..
99739984
);
99749985
return NULL;
99759986
}
9976-
9987+
if(self->were_renamed){
9988+
private_DtwResource_raise_error(
9989+
self,
9990+
DTW_RESOURCE_RENAMED_RESOURCE_CANNOT_HAVE_SONS,
9991+
"you cannot create a sub resurce from a renamed resource",
9992+
self->name
9993+
);
9994+
return NULL;
9995+
}
99779996
va_list args;
99789997
va_start(args, format);
99799998
char *name = private_dtw_format_vaarg(format,args);
@@ -10375,6 +10394,7 @@ void DtwResourceArray_represent(DtwResourceArray *self){
1037510394
void DtwResourceArray_free(DtwResourceArray *self){
1037610395
for(int i = 0; i < self->size; i++){
1037710396
DtwResource_free(self->resources[i]);
10397+
1037810398
}
1037910399
free(self->resources);
1038010400
free(self);

tests/doTheWorld_test.h

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1305,7 +1305,7 @@ void DtwTransaction_free(struct DtwTransaction *self);
13051305
#define DTW_RESOURCE_PRIMARY_KEY_CANNOT_HAVE_SUB_RESOURCE 7
13061306
#define DTW_IMPOSSIBLE_TO_RENAME_A_PRIMARY_KEY 8
13071307
#define DTW_RESOURCE_PRIMARY_KEY_CANNOT_HAVE_SUB_SCHEMA 9
1308-
1308+
#define DTW_RESOURCE_RENAMED_RESOURCE_CANNOT_HAVE_SONS 10
13091309
typedef struct {
13101310
DtwTransaction *transaction;
13111311
DtwRandonizer *randonizer;
@@ -1339,6 +1339,7 @@ typedef struct DtwResource{
13391339
bool its_value_folder;
13401340
bool loaded;
13411341
bool is_binary;
1342+
bool were_renamed;
13421343
unsigned char *value_any;
13431344
long value_size;
13441345

@@ -9224,7 +9225,18 @@ void DtwResource_rename(DtwResource *self,const char *new_name){
92249225
);
92259226
return;
92269227
}
9228+
DtwResourceArray *sons =self->sub_resources;
9229+
if(sons->size > 0){
9230+
private_DtwResource_raise_error(
9231+
self,
9232+
DTW_RESOURCE_RENAMED_RESOURCE_CANNOT_HAVE_SONS,
9233+
"you cannot rename a resource with active sons",
9234+
self->name
9235+
);
9236+
return;
9237+
}
92279238

9239+
self->were_renamed = true;
92289240
char *old_path = strdup(self->path);
92299241
free(self->path);
92309242
free(self->name);
@@ -9244,8 +9256,7 @@ void DtwResource_rename(DtwResource *self,const char *new_name){
92449256
else{
92459257
dtw_move_any(old_path,self->path,DTW_NOT_MERGE);
92469258
}
9247-
DtwResourceArray_free(self->sub_resources);
9248-
self->sub_resources = newDtwResourceArray();
9259+
92499260
free(old_path);
92509261

92519262
}
@@ -9973,7 +9984,15 @@ DtwResource * DtwResource_sub_resource(DtwResource *self,const char *format, ..
99739984
);
99749985
return NULL;
99759986
}
9976-
9987+
if(self->were_renamed){
9988+
private_DtwResource_raise_error(
9989+
self,
9990+
DTW_RESOURCE_RENAMED_RESOURCE_CANNOT_HAVE_SONS,
9991+
"you cannot create a sub resurce from a renamed resource",
9992+
self->name
9993+
);
9994+
return NULL;
9995+
}
99779996
va_list args;
99789997
va_start(args, format);
99799998
char *name = private_dtw_format_vaarg(format,args);
@@ -10375,6 +10394,7 @@ void DtwResourceArray_represent(DtwResourceArray *self){
1037510394
void DtwResourceArray_free(DtwResourceArray *self){
1037610395
for(int i = 0; i < self->size; i++){
1037710396
DtwResource_free(self->resources[i]);
10397+
1037810398
}
1037910399
free(self->resources);
1038010400
free(self);

0 commit comments

Comments
 (0)