From: Christian Heller <c.heller@plomlompom.de>
Date: Sun, 24 Nov 2013 23:48:44 +0000 (+0100)
Subject: Transformed trouble_msg() into exit_err() wrapper exit_trouble(), eliminating some... 
X-Git-Tag: tce~917
X-Git-Url: https://plomlompom.com/repos/%7B%7B%20web_path%20%7D%7D/decks/add_task?a=commitdiff_plain;h=4d6dba920fe02c38aa234c4991d72418e802314a;p=plomrogue

Transformed trouble_msg() into exit_err() wrapper exit_trouble(), eliminating some code and memory management overhead.
---

diff --git a/src/command_db.c b/src/command_db.c
index c0aa523..7e60b1d 100644
--- a/src/command_db.c
+++ b/src/command_db.c
@@ -6,9 +6,8 @@
 #include <stdint.h> /* for uint8_t */
 #include <string.h> /* for strlen(), strtok() */
 #include "main.h" /* for world global */
-#include "rexit.h" /* for exit_err() */
 #include "readwrite.h" /* for textfile_sizes(), try_fopen(), try_fclose() */
-#include "misc.h" /* for try_malloc() */
+#include "misc.h" /* for try_malloc(), exit_trouble */
 
 
 
@@ -79,12 +78,12 @@ extern char * get_command_longdsc(char * dsc_short)
 extern void init_command_db()
 {
     char * f_name = "init_command_db()";
-    char * err_s = "Trouble in init_command_db() with textfile_sizes().";
 
     char * path = "config/commands";
     FILE * file = try_fopen(path, "r", f_name);
     uint16_t lines, linemax;
-    exit_err(textfile_sizes(file, &linemax, &lines), err_s);
+    uint8_t test = textfile_sizes(file, &linemax, &lines);
+    exit_trouble(test, f_name, "textfile_sizes()");
     char line[linemax + 1];
 
     struct Command * cmds = try_malloc(lines * sizeof(struct Command), f_name);
diff --git a/src/misc.c b/src/misc.c
index e71770d..06c6a30 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -34,27 +34,25 @@ extern uint16_t rrand()
 
 
 
-extern char * trouble_msg(char * parent, char * child)
+extern void exit_trouble(uint8_t test, char * parent, char * child)
 {
     char * p1 = "Trouble in ";
     char * p2 = " with ";
     char * p3 = ".";
     uint16_t size = strlen(p1) + strlen(parent) + strlen(p2) + strlen(child)
                     + strlen(p3) + 1;
-    char * msg = malloc(size);
+    char msg[size];
     exit_err(NULL == msg, "malloc() in trouble_msg() failed.");
     sprintf(msg, "%s%s%s%s%s", p1, parent, p2, child, p3);
-    return msg;
+    exit_err(test, msg);
 }
 
 
 
 extern void * try_malloc(size_t size, char * f)
 {
-    char * msg = trouble_msg(f, "malloc()");
     void * p = malloc(size);
-    exit_err(NULL == p, msg);
-    free(msg);
+    exit_trouble(NULL == p, f, "malloc()");
     return p;
 }
 
@@ -62,10 +60,8 @@ extern void * try_malloc(size_t size, char * f)
 
 extern void * try_calloc(size_t size1, size_t size2, char * f)
 {
-    char * msg = trouble_msg(f, "calloc()");
     void * p = calloc(size1, size2);
-    exit_err(NULL == p, msg);
-    free(msg);
+    exit_trouble(NULL == p, f, "calloc()");
     return p;
 }
 
diff --git a/src/misc.h b/src/misc.h
index bc3e274..ddc6be6 100644
--- a/src/misc.h
+++ b/src/misc.h
@@ -20,8 +20,8 @@ struct Map;
  */
 extern uint16_t rrand();
 
-/* Returns message: "Trouble in ".parent." with ".child."." (try_*() helper) */
-extern char * trouble_msg(char * parent, char * child);
+/* Do exit_err() with message: "Trouble in ".parent." with ".child."." */
+extern void exit_trouble(uint8_t test, char * parent, char * child);
 
 /* Wrappers to malloc(), calloc() from function called "f" calling exit_err()
  * with trouble_msg() error message if necessary.
diff --git a/src/readwrite.c b/src/readwrite.c
index 4bdf5ae..531409e 100644
--- a/src/readwrite.c
+++ b/src/readwrite.c
@@ -8,7 +8,7 @@
 #include <string.h> /* for strlen()*/
 #include <unistd.h> /* for unlink() */
 #include "rexit.h"  /* for exit_err() */
-#include "misc.h"   /* for trouble_msg() */
+#include "misc.h"   /* for exit_trouble() */
 #include "main.h"   /* for world global */
 
 
@@ -52,19 +52,15 @@ extern FILE * try_fopen(char * path, char * mode, char * f)
 
 extern void try_fclose(FILE * file, char * f)
 {
-    char * msg = trouble_msg(f, "fclose()");
-    exit_err(fclose(file), msg);
-    free(msg);
+    exit_trouble(fclose(file), f, "fclose()");
 }
 
 
 
 extern char * try_fgets(char * line, int linemax, FILE * file, char * f)
 {
-    char * msg = trouble_msg(f, "fgets()");
     char * test = fgets(line, linemax, file);
-    exit_err(NULL == test && ferror(file), msg);
-    free(msg);
+    exit_trouble(NULL == test && ferror(file), f, "fgets()");
     return test;
 }
 
@@ -73,9 +69,7 @@ extern char * try_fgets(char * line, int linemax, FILE * file, char * f)
 extern void try_fwrite(void * ptr, size_t size, size_t nmemb, FILE * stream,
                        char * f)
 {
-    char * msg = trouble_msg(f, "fwrite()");
-    exit_err(0 == fwrite(ptr, size, nmemb, stream), msg);
-    free(msg);
+    exit_trouble(0 == fwrite(ptr, size, nmemb, stream), f, "fwrite()");
 }
 
 
@@ -108,10 +102,8 @@ extern void try_fclose_unlink_rename(FILE * file, char * p1, char * p2,
 
 extern uint16_t get_linemax(FILE * file, char * f)
 {
-    char * msg = trouble_msg(f, "textfile_sizes()");
     uint16_t linemax;
-    exit_err(textfile_sizes(file, &linemax, NULL), msg);
-    free(msg);
+    exit_trouble(textfile_sizes(file, &linemax, NULL), f, "textfile_sizes()");
     return linemax;
 }
 
diff --git a/src/wincontrol.c b/src/wincontrol.c
index 658a8ce..296c4a9 100644
--- a/src/wincontrol.c
+++ b/src/wincontrol.c
@@ -20,7 +20,7 @@
                         * draw_win_keybindings_winconf_keybindings(),
                         * draw_winconf_geometry(), draw_winconf_keybindings()
                         */
-#include "misc.h" /* for try_malloc(), trouble_msg() */
+#include "misc.h" /* for try_malloc(), exit_trouble() */
 #include "dirent.h" /* for opendir(), closedir(), readdir() */
 #include "errno.h" /* for errno */
 #include "keybindings.h" /* for KeyBinding struct, free_keybindings() */
@@ -337,13 +337,9 @@ extern struct Win * get_win_by_id(char id)
 extern void init_winconfs()
 {
     char * f_name = "init_winconfs()";
-    char * err_o = trouble_msg(f_name, "opendir()");
-    char * err_r = trouble_msg(f_name, "readdir()");
-    char * err_c = trouble_msg(f_name, "closedir()");
 
     DIR * dp = opendir("config/windows");
-    exit_err(NULL == dp, err_o);
-    free(err_o);
+    exit_trouble(NULL == dp, f_name, "opendir()");
     struct dirent * fn;
     errno = 0;
     char * winconf_ids = try_malloc(256, f_name);
@@ -359,10 +355,8 @@ extern void init_winconfs()
         }
     }
     winconf_ids[i] = '\0';
-    exit_err(errno, err_r);
-    free(err_r);
-    exit_err(closedir(dp), err_c);
-    free(err_c);
+    exit_trouble(errno, f_name, "readdir()");
+    exit_trouble(closedir(dp), f_name, "closedir()");
     world.winconf_ids = try_malloc(strlen(winconf_ids) + 1, f_name);
     memcpy(world.winconf_ids, winconf_ids, strlen(winconf_ids) + 1);
     free(winconf_ids);
@@ -422,9 +416,7 @@ extern void sorted_wintoggle_and_activate()
     try_fgets(win_order, linemax + 1, file, f_name);
 
     uint8_t a = 0;
-    char * err = trouble_msg(f_name, "read_uint8()");
-    exit_err(read_uint8(file, &a), err);
-    free(err);
+    exit_trouble(read_uint8(file, &a), f_name, "read_uint8()");
 
     try_fclose(file, f_name);