home · contact · privacy
Test return values of _all_ *printf() calls.
[plomrogue] / src / server / io.c
index 4d1b609c07457da46b3b0f94f9a65a0202d2b867..258ec45f5da45673e6db7ed8113dac3128d6e35f 100644 (file)
@@ -180,8 +180,10 @@ static void read_file_into_queue()
 static void update_worldstate_file()
 {
     char * f_name = "update_worldstate_file()";
-    char path_tmp[strlen(s[PATH_WORLDSTATE]) + strlen(s[PATH_SUFFIX_TMP]) + 1];
-    sprintf(path_tmp, "%s%s", s[PATH_WORLDSTATE], s[PATH_SUFFIX_TMP]);
+    uint16_t size = strlen(s[PATH_WORLDSTATE]) + strlen(s[PATH_SUFFIX_TMP]) + 1;
+    char * path_tmp = try_malloc(size, f_name);
+    int test = sprintf(path_tmp, "%s%s", s[PATH_WORLDSTATE],s[PATH_SUFFIX_TMP]);
+    exit_trouble(test < 0, f_name, "sprintf()");
     FILE * file = try_fopen(path_tmp, "w", f_name);
     struct Thing * player = get_player();
     write_value_as_line(world.turn, file);
@@ -196,6 +198,7 @@ static void update_worldstate_file()
         try_fwrite(world.log, strlen(world.log), 1, file, f_name);
     }
     try_fclose_unlink_rename(file, path_tmp, s[PATH_WORLDSTATE], f_name);
+    free(path_tmp);
     set_cleanup_flag(CLEANUP_WORLDSTATE);
     char * dot = ".\n";;
     try_fwrite(dot, strlen(dot), 1, world.file_out, f_name);
@@ -208,7 +211,7 @@ static void write_value_as_line(uint32_t value, FILE * file)
 {
     char * f_name = "write_value_as_line()";
     char write_buf[12];     /* Holds 10 digits of uint32_t maximum + \n + \0. */
-    sprintf(write_buf, "%u\n", value);
+    exit_trouble(sprintf(write_buf, "%u\n", value) < 0, f_name, "sprintf()");
     try_fwrite(write_buf, strlen(write_buf), 1, file, f_name);
 }