clean alloc checks
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Wed, 9 Oct 2024 09:52:53 +0000 (11:52 +0200)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Wed, 9 Oct 2024 09:52:53 +0000 (11:52 +0200)
bf.c

diff --git a/bf.c b/bf.c
index be1622023d6bb63c6af416adf6be055156e339d6..7069e04b81966f41799f159eab0385955f834d3a 100644 (file)
--- a/bf.c
+++ b/bf.c
 #define MAXJUMP 4
 #define MEMSIZE 10
 
+#define CHECKALLOC(ptr) \
+    do { \
+        if ((ptr) == NULL) { \
+            VERBOSE (ERROR, fprintf (stderr, "can't get enough memory for '%s'\n", #ptr)); \
+            exit (1); \
+        } \
+    } while (0)
+
 /* type definition */
 
 /* gobal variables */
@@ -171,10 +179,7 @@ int main (int argc, char *argv[])
                 free (buffer);
             }
             buffer = strdup (optarg);
-            if (buffer == NULL) {
-                VERBOSE (ERROR, fprintf (stderr, "%s: can't allocate memory\n", progname));
-                return 1;
-            }
+            CHECKALLOC (buffer);
             size = strlen (buffer) + 1;
             break;
         case 'i':
@@ -223,13 +228,10 @@ int main (int argc, char *argv[])
     if (fid) {
         while (!feof (fid)) {
             buffer = (char *) realloc (buffer, size + BUFSIZE);
-            if (buffer == NULL) {
-                VERBOSE (ERROR, fprintf (stderr, "%s: can't allocate memory\n", progname));
-                return 1;
-            }
+            CHECKALLOC (buffer);
             memset (buffer + size, 0, BUFSIZE);
             n = fread (buffer + size, 1, BUFSIZE, fid);
-            if (errno != 0) {
+            if ((n == 0) && (errno != 0)) {
                 VERBOSE (ERROR, fprintf (stderr, "%s: can't read data from file '%s'\n", progname, input));
                 return 1;
             }
@@ -266,9 +268,7 @@ int main (int argc, char *argv[])
     }
 
     /* free buffer */
-    if (buffer) {
-        free (buffer);
-    }
+    free (buffer);
 
     VERBOSE (INFO, fprintf (stdout, "\nmemory:"); int _i; for (_i = 0; _i < MEMSIZE; _i++) fprintf (stdout," %d", mem[_i]); fprintf (stdout,"\n"));