updated upstream url, changed to value types for vectors, added checked mallocs

AuthorKonata <konata@posteo.jp>
Date
Commit26dc9af38475686ff0a5b87c394aa78f8bdc7938
Parent8606e38
7 files changed, 57 insertions(+), 46 deletions(-)
Minclude/simple-go/simple-go.h
@@ -37,8 +37,8 @@ typedef struct game_state
3737
3838 typedef struct go_score
3939 {
40- Vector* white_groups;
41- Vector* black_groups;
40+ Vector white_groups;
41+ Vector black_groups;
4242 double white_points;
4343 double black_points;
4444 } go_score;
Mmeson.build
@@ -1,6 +1,6 @@
11 project('simple-go', 'c')
22
3-CFLAGS = ['-std=c11', '-fstrict-aliasing', '-Wall', '-Wpedantic', '-Wextra', '-Wno-unused-parameter', '-Wconversion', '-Wstrict-aliasing', '-Wstrict-overflow=5']
3+CFLAGS = ['-std=c11', '-fstrict-aliasing', '-Wall', '-Wpedantic', '-Wextra', '-Wno-unused-parameter', '-Wconversion', '-Wstrict-aliasing=1', '-Wstrict-overflow=5']
44
55 cutils_dep = dependency('cutils', fallback : ['cutils', 'cutils_dep'])
66
Msrc/simple-go.c
@@ -2,10 +2,8 @@
22
33 go_board* create_board(go_coordinate size)
44 {
5- go_board* board = malloc(sizeof(*board));
6- assert(board);
7- board->field_array = malloc(size*size*sizeof(*board->field_array));
8- assert(board->field_array);
5+ go_board* board = malloc_die(sizeof(*board));
6+ board->field_array = malloc_die(size*size*sizeof(*board->field_array));
97 for(go_coordinate i = 0; i < size*size; i++)
108 {
119 board->field_array[i] = EMPTY;
@@ -23,7 +21,7 @@ void delete_board(go_board* board)
2321
2422 game_state* create_game(go_coordinate size, float komi)
2523 {
26- game_state* game = malloc(sizeof(*game));
24+ game_state* game = malloc_die(sizeof(*game));
2725 game->board = create_board(size);
2826 game->black_turn = true;
2927 game->komi = komi;
@@ -342,12 +340,26 @@ go_coordinate count_liberties(const go_board* board, const go_board* overlay)
342340 return liberties;
343341 }
344342
343+void delete_board_wrapper(void* board)
344+{
345+ delete_board(board);
346+}
347+
345348 go_score* score_game(const game_state* game)
346349 {
347- go_score* ret = malloc(sizeof(*ret));
350+ go_score* ret = malloc_die(sizeof(*ret));
351+
352+ if(!new_vector_adv(&ret->white_groups, VECTOR_DEFAULT_SIZE, delete_board_wrapper))
353+ {
354+ perror("malloc");
355+ exit(EXIT_FAILURE);
356+ }
357+ if(!new_vector_adv(&ret->black_groups, VECTOR_DEFAULT_SIZE, delete_board_wrapper))
358+ {
359+ perror("malloc");
360+ exit(EXIT_FAILURE);
361+ }
348362
349- ret->white_groups = new_vector();
350- ret->black_groups = new_vector();
351363 ret->white_points = game->white_captured + game->komi;
352364 ret->black_points = game->black_captured;
353365
@@ -363,15 +375,15 @@ go_score* score_game(const game_state* game)
363375 if(get_board_at(board, y, x) == EMPTY)
364376 {
365377 //check if field is already counted
366- for(go_coordinate i = 0; i < ret->white_groups->length; i++)
378+ for(go_coordinate i = 0; i < ret->white_groups.length; i++)
367379 {
368- current = vector_at(ret->white_groups, i);
380+ current = vector_at(&ret->white_groups, i);
369381 if(get_board_at(current, y, x) == GROUP)
370382 goto next_loop;
371383 }
372- for(go_coordinate i = 0; i < ret->black_groups->length; i++)
384+ for(go_coordinate i = 0; i < ret->black_groups.length; i++)
373385 {
374- current = vector_at(ret->black_groups, i);
386+ current = vector_at(&ret->black_groups, i);
375387 if(get_board_at(current, y, x) == GROUP)
376388 goto next_loop;
377389 }
@@ -382,10 +394,10 @@ go_score* score_game(const game_state* game)
382394 //check if field belongs to a group
383395 if((belongs = group_belongs(board, overlay)) == WHITE)
384396 {
385- vector_push(ret->white_groups, overlay);
397+ vector_push(&ret->white_groups, overlay);
386398 ret->white_points += (double)group_size(overlay);
387399 } else if(belongs == BLACK) {
388- vector_push(ret->black_groups, overlay);
400+ vector_push(&ret->black_groups, overlay);
389401 ret->black_points += (double)group_size(overlay);
390402 } else {
391403 delete_board(overlay);
@@ -398,15 +410,10 @@ go_score* score_game(const game_state* game)
398410 return ret;
399411 }
400412
401-void delete_board_wrapper(void* board)
402-{
403- delete_board(board);
404-}
405-
406413 void delete_score(go_score* score)
407414 {
408- delete_vector(score->white_groups, delete_board_wrapper);
409- delete_vector(score->black_groups, delete_board_wrapper);
415+ delete_vector(&score->white_groups);
416+ delete_vector(&score->black_groups);
410417 free(score);
411418 }
412419
Msrc/simple-gtp-func.c
@@ -5,7 +5,7 @@ const char* known_commands_array[] = {"protocol_version","name","version","known
55
66 static char* cmd_error(const char* msg, const char* id)
77 {
8- char* ret = malloc(strlen("? ") + (msg ? strlen(msg) : 0) + (id ? strlen(id) : 0) + 3);
8+ char* ret = malloc_die(strlen("? ") + (msg ? strlen(msg) : 0) + (id ? strlen(id) : 0) + 3);
99 strcpy(ret, "?");
1010
1111 if(id)
@@ -22,7 +22,7 @@ static char* cmd_error(const char* msg, const char* id)
2222
2323 static char* cmd_success(const char* msg, const char* id)
2424 {
25- char* ret = malloc(strlen("= ") + (msg ? strlen(msg) : 0) + (id ? strlen(id) : 0) + 3);
25+ char* ret = malloc_die(strlen("= ") + (msg ? strlen(msg) : 0) + (id ? strlen(id) : 0) + 3);
2626 strcpy(ret, "=");
2727
2828 if(id)
@@ -109,7 +109,7 @@ char* clear_board_func(const Vector* arguments, const char* id, game_state* game
109109
110110 char* play_func(const Vector* arguments, const char* id, game_state* game)
111111 {
112- char* color = malloc(6);
112+ char* color = malloc_die(6);
113113 char xchar;
114114 size_t x;
115115 size_t y;
@@ -118,8 +118,8 @@ char* play_func(const Vector* arguments, const char* id, game_state* game)
118118 goto error;
119119 if(snprintf(color, 6, "%s", (char*)vector_at(arguments,0)) <= 0) //"white" and "black" are only 6 chars
120120 goto error;
121- if(!(strcmp_nocase(color, "white") == 0 || strcmp_nocase(color, "black") == 0 || // check color
122- strcmp_nocase(color, "w") == 0 || strcmp_nocase(color, "b") == 0))
121+ if(!(cutil_strcasecmp(color, "white") == 0 || cutil_strcasecmp(color, "black") == 0 || // check color
122+ cutil_strcasecmp(color, "w") == 0 || cutil_strcasecmp(color, "b") == 0))
123123 goto error;
124124 if(sscanf(vector_at(arguments,1), "%c", &xchar) <= 0) // get horizontal coordinate
125125 goto error;
@@ -150,7 +150,7 @@ error:
150150
151151 char* genmove_func(const Vector* arguments, const char* id, game_state* game)
152152 {
153- char* color = malloc(6);
153+ char* color = malloc_die(6);
154154 if(arguments->length == 1 &&
155155 (snprintf(color, 6, "%s", (char*)vector_at(arguments,0)) > 0) &&
156156 (strcmp(color, "white") == 0 || strcmp(color, "black") == 0 ||
Msrc/simple-gtp.c
@@ -4,7 +4,7 @@
44 typedef struct msg_formatted
55 {
66 char* command;
7- Vector* arguments;
7+ Vector arguments;
88 char* id;
99 } msg_formatted;
1010
@@ -20,17 +20,21 @@ static msg_formatted format_msg(const char* msg)
2020
2121 if(index)
2222 {
23- formatted.id = malloc(index+1);
23+ formatted.id = malloc_die(index+1);
2424 strncpy(formatted.id, msg, index);
2525 formatted.id[index] = '\0';
2626 }
2727
28- formatted.command = malloc(strlen(msg+index) + 1);
28+ formatted.command = malloc_die(strlen(msg+index) + 1);
2929 sscanf(msg+index, "%s", formatted.command);
3030
31- formatted.arguments = new_vector();
31+ if(!new_vector_adv(&formatted.arguments, VECTOR_DEFAULT_SIZE, free))
32+ {
33+ perror("malloc");
34+ exit(EXIT_FAILURE);
35+ }
3236
33- char* tmp_msg = malloc(strlen(msg+index)+1);
37+ char* tmp_msg = malloc_die(strlen(msg+index)+1);
3438 strcpy(tmp_msg, msg+index);
3539
3640
@@ -39,14 +43,14 @@ static msg_formatted format_msg(const char* msg)
3943
4044 while(current)
4145 {
42- tmp_arg = malloc(strlen(current)+1);
46+ tmp_arg = malloc_die(strlen(current)+1);
4347 strcpy(tmp_arg, current);
44- vector_push(formatted.arguments, tmp_arg);
48+ vector_push(&formatted.arguments, tmp_arg);
4549 current = strtok(NULL, " ");
4650 }
4751
48- if(formatted.arguments->length > 1)
49- vector_remove(formatted.arguments, 0, free);
52+ if(formatted.arguments.length > 1)
53+ vector_remove(&formatted.arguments, 0);
5054
5155 free(tmp_msg);
5256
@@ -85,7 +89,7 @@ char* handle_gtp_cmd(const char* msg, game_state* game)
8589
8690 msg_formatted formatted = format_msg(msg_san);
8791 char* command = formatted.command;
88- Vector* arguments = formatted.arguments;
92+ Vector arguments = formatted.arguments;
8993 char* id = formatted.id;
9094
9195 char* ret;
@@ -118,12 +122,12 @@ char* handle_gtp_cmd(const char* msg, game_state* game)
118122 func_ptr = final_score_func;
119123 }
120124
121- ret = func_ptr(arguments, id, game);
125+ ret = func_ptr(&arguments, id, game);
122126
123127 free(command);
124128 free(msg_san);
125129 free(id);
126- delete_vector(arguments, free);
130+ delete_vector(&arguments);
127131
128132 return ret;
129133 }
Msrc/test.c
@@ -164,9 +164,9 @@ static void test5(void)
164164
165165 go_score* score = score_game(game);
166166 print_board(game->board);
167- printf("White groups: %ld\n", score->white_groups->length);
167+ printf("White groups: %ld\n", score->white_groups.length);
168168 printf("White points: %lf\n", score->white_points);
169- printf("Black groups: %ld\n", score->black_groups->length);
169+ printf("Black groups: %ld\n", score->black_groups.length);
170170 printf("Black points: %lf\n", score->black_points);
171171
172172
Msubprojects/cutils.wrap
@@ -1,4 +1,4 @@
11 [wrap-git]
22 directory=cutils
3-url=https://github.com/marcschulze98/libcutils
4-revision=head
3+url=https://gitlab.com/marcschulze98/libcutils.git
4+revision=head