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).
#define streq(s1, s2) (strcmp (s1, s2) == 0)
#if DEBUG
#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__)
-# 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)
#endif
#define free_null(ptr) free_wrap((void **)&ptr)
static void print_clean (const char *);
static void print_free_offsets (const char *, char ***, unsigned int);
static void *malloc_wrap (size_t);
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 *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 *);
static void *realloc_wrap_debug (void *, size_t, const char *, unsigned int);
static void free_wrap (void **);
static char *strdup_wrap (const char *);
- color_names[index] = xmalloc (sizeof (struct color_name));
+ color_names[index] = xcalloc (1, sizeof (struct color_name));
color_names[index]->orig = xstrdup (color);
color_names[index]->orig = xstrdup (color);
+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)
{
static void *
realloc_wrap (void *ptr, size_t size)
{
+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)
{
static void *
realloc_wrap_debug (void *ptr, size_t size, const char *file, unsigned int line)
{