]> git.refcnt.org Git - colorize.git/commitdiff
Introduce calloc wrappers and zero memory
authorSteven Schubiger <stsc@refcnt.org>
Fri, 26 Apr 2013 21:18:05 +0000 (23:18 +0200)
committerSteven Schubiger <stsc@refcnt.org>
Fri, 26 Apr 2013 21:18:05 +0000 (23:18 +0200)
Zero allocated memory of size "color name" struct to allow for
free() to be called for struct members even when not all of them
have been set explicitly yet.  This is necessary since freeing
those might take place prematurely in cleanup() (triggered
via atexit).

colorize.c

index c0114c45b53c286a4f4de01584b19bf777e77544..078554a4025eebe1b7c851fb1796ee65538109fe 100644 (file)
 #define streq(s1, s2) (strcmp (s1, s2) == 0)
 
 #if DEBUG
-# define xmalloc(size)       malloc_wrap_debug(size,       __FILE__, __LINE__)
-# define xrealloc(ptr, size) realloc_wrap_debug(ptr, size, __FILE__, __LINE__)
+# define xmalloc(size)        malloc_wrap_debug(size,        __FILE__, __LINE__)
+# define xcalloc(nmemb, size) calloc_wrap_debug(nmemb, size, __FILE__, __LINE__)
+# define xrealloc(ptr, size)  realloc_wrap_debug(ptr, size,  __FILE__, __LINE__)
 #else
-# define xmalloc(size)       malloc_wrap(size)
-# define xrealloc(ptr, size) realloc_wrap(ptr, size)
+# define xmalloc(size)        malloc_wrap(size)
+# define xcalloc(nmemb, size) calloc_wrap(nmemb, size)
+# define xrealloc(ptr, size)  realloc_wrap(ptr, size)
 #endif
 
 #define free_null(ptr) free_wrap((void **)&ptr)
@@ -197,8 +199,10 @@ static void print_line (const struct color **, bool, const char * const, unsigne
 static void print_clean (const char *);
 static void print_free_offsets (const char *, char ***, unsigned int);
 static void *malloc_wrap (size_t);
+static void *calloc_wrap (size_t, size_t);
 static void *realloc_wrap (void *, size_t);
 static void *malloc_wrap_debug (size_t, const char *, unsigned int);
+static void *calloc_wrap_debug (size_t, size_t, const char *, unsigned int);
 static void *realloc_wrap_debug (void *, size_t, const char *, unsigned int);
 static void free_wrap (void **);
 static char *strdup_wrap (const char *);
@@ -523,7 +527,7 @@ process_options (unsigned int arg_cnt, char **option_strings, bool *bold, const
               }
           }
 
-        color_names[index] = xmalloc (sizeof (struct color_name));
+        color_names[index] = xcalloc (1, sizeof (struct color_name));
 
         color_names[index]->orig = xstrdup (color);
 
@@ -921,6 +925,15 @@ malloc_wrap (size_t size)
     return p;
 }
 
+static void *
+calloc_wrap (size_t nmemb, size_t size)
+{
+    void *p = calloc (nmemb, size);
+    if (!p)
+      MEM_ALLOC_FAIL ();
+    return p;
+}
+
 static void *
 realloc_wrap (void *ptr, size_t size)
 {
@@ -939,6 +952,15 @@ malloc_wrap_debug (size_t size, const char *file, unsigned int line)
     return p;
 }
 
+static void *
+calloc_wrap_debug (size_t nmemb, size_t size, const char *file, unsigned int line)
+{
+    void *p = calloc (nmemb, size);
+    if (!p)
+      MEM_ALLOC_FAIL_DEBUG (file, line);
+    return p;
+}
+
 static void *
 realloc_wrap_debug (void *ptr, size_t size, const char *file, unsigned int line)
 {