home · contact · privacy
Test return values of _all_ *printf() calls.
[plomrogue] / src / common / rexit.c
index facf63fffc71a53a9ffd9c0581383f9954bde4f1..7e16f12f7c8bce1aeed17635c9f73ef8f963a8c1 100644 (file)
@@ -4,8 +4,9 @@
 #include <errno.h> /* global errno */
 #include <stdint.h> /* uint16_t */
 #include <stdio.h> /* printf(), perror(), sprintf() */
-#include <stdlib.h> /* exit(), EXIT_FAILURE */
+#include <stdlib.h> /* exit(), free(), EXIT_FAILURE */
 #include <string.h> /* strlen() */
+#include "try_malloc.h" /* try_malloc() */
 
 
 
@@ -43,12 +44,15 @@ extern void exit_err(int err, char * msg)
 
 extern void exit_trouble(int err, char * parent, char * child)
 {
+    char * f_name = "exit_trouble()";
     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[size];
-    sprintf(msg, "%s%s%s%s%s", p1, parent, p2, child, p3);
+    char * msg = try_malloc(size, f_name);
+    int test = sprintf(msg, "%s%s%s%s%s", p1, parent, p2, child, p3);
+    exit_err(test < 0, "Trouble in exit_trouble() with sprintf()");
     exit_err(err, msg);
+    free(msg);
 }