Make sure to add a ref when adding to the hash table.
Forgot the increment the format array inside of fmt_free().
Marked an allocated string when doing FT_LIT.
#define NEWCOMP(cm,name) do { \
cm = ((struct comp *) calloc(1, sizeof (struct comp)));\
cm->c_name = getcpy(name);\
#define NEWCOMP(cm,name) do { \
cm = ((struct comp *) calloc(1, sizeof (struct comp)));\
cm->c_name = getcpy(name);\
ncomp++;\
i = CHASH(name);\
cm->c_next = wantcomp[i];\
ncomp++;\
i = CHASH(name);\
cm->c_next = wantcomp[i];\
#define LS(type, str) do { NEW(type,0,0); fp->f_text = (str); fp->f_flags |= FF_STRALLOC; } while (0)
#define PUTCOMP(comp) do { NEW(FT_COMP,0,0); ADDC(comp); } while (0)
#define LS(type, str) do { NEW(type,0,0); fp->f_text = (str); fp->f_flags |= FF_STRALLOC; } while (0)
#define PUTCOMP(comp) do { NEW(FT_COMP,0,0); ADDC(comp); } while (0)
-#define PUTLIT(str) do { NEW(FT_LIT,0,0); fp->f_text = getcpy(str); } while (0)
+#define PUTLIT(str) do { NEW(FT_LIT,0,0); fp->f_text = getcpy(str); fp->f_flags |= FF_STRALLOC; } while (0)
#define PUTC(c) do { NEW(FT_CHAR,0,0); fp->f_char = (c); } while (0)
static char *format_string;
#define PUTC(c) do { NEW(FT_CHAR,0,0); fp->f_char = (c); } while (0)
static char *format_string;
if (next_fp == NULL)
adios (NULL, "unable to allocate format storage");
if (next_fp == NULL)
adios (NULL, "unable to allocate format storage");
infunction = 0;
cp = compile(format_string);
infunction = 0;
cp = compile(format_string);
free(fp->f_text);
if (fp->f_flags & FF_COMPREF)
free_component(fp->f_comp);
free(fp->f_text);
if (fp->f_flags & FF_COMPREF)
free_component(fp->f_comp);