char *orig;
 };
 
-static struct color_name *color_names[3] = { NULL, NULL, NULL };
-
 struct color {
     const char *name;
     const char *code;
 static void
 cleanup (void)
 {
-    free_color_names (color_names);
-
     if (stream && fileno (stream) != STDIN_FILENO)
       fclose (stream);
 #if DEBUG
     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;
+    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;
           }
 
         color_names[index] = xcalloc (1, sizeof (struct color_name));
+        STACK_VAR (color_names[index]);
 
         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);
+        STACK_VAR (color_names[index]->name);
       }
 
     RELEASE_VAR (str);