Don't call the color_names memory freeing code explicitly in the
cleanup function as it is taken care of via {STACK,RELEASE}_VAR().
This implies the memory is "garbage collected" like other uses of
those macros, too.
Also, declare and initialize the color_names array in a non-global,
tighter scope.
-static struct color_name *color_names[3] = { NULL, NULL, NULL };
-
struct color {
const char *name;
const char *code;
struct color {
const char *name;
const char *code;
static void
cleanup (void)
{
static void
cleanup (void)
{
- free_color_names (color_names);
-
if (stream && fileno (stream) != STDIN_FILENO)
fclose (stream);
#if DEBUG
if (stream && fileno (stream) != STDIN_FILENO)
fclose (stream);
#if DEBUG
unsigned int i;
for (i = 0; color_names[i]; i++)
{
unsigned int i;
for (i = 0; color_names[i]; i++)
{
- free (color_names[i]->name);
- free (color_names[i]->orig);
- free_null (color_names[i]);
+ RELEASE_VAR (color_names[i]->name);
+ RELEASE_VAR (color_names[i]->orig);
+ RELEASE_VAR (color_names[i]);
int ret;
char *p;
struct stat sb;
int ret;
char *p;
struct stat sb;
+ struct color_name *color_names[3] = { NULL, NULL, NULL };
const char *color_string = arg_cnt >= 1 ? arg_strings[0] : NULL;
const char *file_string = arg_cnt == 2 ? arg_strings[1] : NULL;
const char *color_string = arg_cnt >= 1 ? arg_strings[0] : NULL;
const char *file_string = arg_cnt == 2 ? arg_strings[1] : NULL;
}
color_names[index] = xcalloc (1, sizeof (struct color_name));
}
color_names[index] = xcalloc (1, sizeof (struct color_name));
+ STACK_VAR (color_names[index]);
color_names[index]->orig = xstrdup (color);
color_names[index]->orig = xstrdup (color);
+ STACK_VAR (color_names[index]->orig);
for (ch = color; *ch; ch++)
*ch = tolower (*ch);
color_names[index]->name = xstrdup (color);
for (ch = color; *ch; ch++)
*ch = tolower (*ch);
color_names[index]->name = xstrdup (color);
+ STACK_VAR (color_names[index]->name);