X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fclient%2Fio.c;h=ec724786a4b1b87bf607f33b08d3556b273a46cd;hb=f934d0193c89585b9154210bf1ffb08aeebef12a;hp=d0b9dc022b303f1e61de8a12d64e140c2273c8af;hpb=1cb57a35a3b3cc4ec8870531ca254a655c0bdda2;p=plomrogue diff --git a/src/client/io.c b/src/client/io.c index d0b9dc0..ec72478 100644 --- a/src/client/io.c +++ b/src/client/io.c @@ -1,4 +1,9 @@ -/* src/client/io.c */ +/* src/client/io.c + * + * This file is part of PlomRogue. PlomRogue is licensed under the GPL version 3 + * or any later version. For details on its copyright, license, and warranties, + * see the file NOTICE in the root directory of the PlomRogue source package. + */ #define _POSIX_C_SOURCE 1 /* PIPE_BUF */ #include "io.h" @@ -30,11 +35,11 @@ */ static void read_inventory(char * read_buf, uint32_t linemax, FILE * file); -/* Read the next characters in "file" into world.map.cells. In detail: Read +/* Read the next characters in "file" into "map". In detail: Read * world.map.length times world.map.length characters, followed by one ignored * character (that we assume is a newline). */ -static void read_map_cells(FILE * file); +static void read_map_cells(FILE * file, char ** map); /* Repeatedly use try_fgets() with given arguments to read the remaining lines * of "file" into the world.log string. @@ -98,7 +103,7 @@ static void read_inventory(char * read_buf, uint32_t linemax, FILE * file) break; } int old_size = 0; - if (NULL != world.player_inventory) + if (world.player_inventory) { old_size = strlen(world.player_inventory); } @@ -116,17 +121,22 @@ static void read_inventory(char * read_buf, uint32_t linemax, FILE * file) -static void read_map_cells(FILE * file) +static void read_map_cells(FILE * file, char ** map) { - free(world.map.cells); - world.map.cells = try_malloc(world.map.length * world.map.length, __func__); + if (*map) + { + free(*map); + *map = NULL; + } + *map = try_malloc(world.map.length * world.map.length, __func__); + char * map_cells = *map; uint16_t y, x; for (y = 0; y < world.map.length; y++) { for (x = 0; x < world.map.length; x++) { char c = try_fgetc(file, __func__); - world.map.cells[(y * world.map.length) + x] = c; + map_cells[y * world.map.length + x] = c; } try_fgetc(file, __func__); } @@ -141,7 +151,7 @@ static void read_log(char * read_buf, uint32_t linemax, FILE * file) while (try_fgets(read_buf, linemax + 1, file, __func__)) { int old_size = 0; - if (NULL != world.log) + if (world.log) { old_size = strlen(world.log); } @@ -213,7 +223,8 @@ static uint8_t read_world() first_read = 0; } world.map.length = read_value_from_line(read_buf, linemax, file); - read_map_cells(file); + read_map_cells(file, &world.map.cells); + read_map_cells(file, &world.mem_map); read_log(read_buf, linemax, file); free(read_buf); try_fclose(file, __func__);