summaryrefslogtreecommitdiff
path: root/m4/symtab.c
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2006-07-28 16:41:28 +0000
committerEric Blake <ebb9@byu.net>2007-10-06 06:52:46 -0600
commit2c9149360ee50d4cafab78667835ee11efd6ebfa (patch)
tree61b6e115f53e56dbdc71ee4be80ebd042f6f852b /m4/symtab.c
parent894b3594e9c97da9594dbaef39ea427b552803c0 (diff)
downloadm4-2c9149360ee50d4cafab78667835ee11efd6ebfa.tar.gz
* src/freeze.c (reload_frozen_state): Copy string when creating
placeholder, to avoid memory corruption. * m4/symtab.c (symbol_popval): Avoid memory leak. (m4_symbol_rename): Avoid shadowing rename function. (dump_symbol_CB, symtab_dump) [DEBUG_SYM]: Fix compilation. * tests/freeze.at (reloading unknown builtin): Add test. * tests/generate.awk: Capture m4.texinfo line number in testsuite.log, not just generated.at.
Diffstat (limited to 'm4/symtab.c')
-rw-r--r--m4/symtab.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/m4/symtab.c b/m4/symtab.c
index 8a15b5b0..28938973 100644
--- a/m4/symtab.c
+++ b/m4/symtab.c
@@ -305,19 +305,22 @@ symbol_popval (m4_symbol *symbol)
}
if (m4_is_symbol_value_text (stale))
free (m4_get_symbol_value_text (stale));
+ else if (m4_is_symbol_value_placeholder (stale))
+ free (m4_get_symbol_value_placeholder (stale));
free (stale);
}
}
m4_symbol *
-m4_symbol_rename (m4_symbol_table *symtab, const char *name, const char *rename)
+m4_symbol_rename (m4_symbol_table *symtab, const char *name,
+ const char *newname)
{
m4_symbol *symbol = NULL;
m4_symbol **psymbol;
assert (symtab);
assert (name);
- assert (rename);
+ assert (newname);
/* Use a low level hash fetch, so we can save the symbol value when
removing the symbol name from the symbol table. */
@@ -331,7 +334,7 @@ m4_symbol_rename (m4_symbol_table *symtab, const char *name, const char *rename)
free (m4_hash_remove (symtab->table, name));
assert (!m4_hash_lookup (symtab->table, name));
- m4_hash_insert (symtab->table, xstrdup (rename), *psymbol);
+ m4_hash_insert (symtab->table, xstrdup (newname), *psymbol);
}
/* else
NAME does not name a symbol in symtab->table! */
@@ -548,13 +551,12 @@ m4_set_symbol_value_placeholder (m4_symbol_value *value, char *text)
#ifdef DEBUG_SYM
-static void *symtab_dump (m4_symbol_table *symtab);
-static void dump_symbol_CB (m4_symbol_table *symtab, const char *name,
+static void *dump_symbol_CB (m4_symbol_table *symtab, const char *name,
m4_symbol *symbol, void *userdata);
-static void *
+static M4_GNUC_UNUSED void *
symtab_dump (m4_symbol_table *symtab)
{
- return symtab_apply (symtab, dump_symbol_CB, NULL);
+ return m4_symtab_apply (symtab, dump_symbol_CB, NULL);
}
static void *
@@ -567,9 +569,7 @@ dump_symbol_CB (m4_symbol_table *symtab, const char *name,
const char * module_name = handle ? m4_get_module_name (handle) : "NONE";
const m4_builtin *bp;
- fprintf (stderr, "%10s: (%d%s) %s=",
- handle ? m4_get_module_name (handle) : "NONE",
- value ? VALUE_FLAGS (value) : 0,
+ fprintf (stderr, "%10s: (%d%s) %s=", module_name, flags,
m4_get_symbol_traced (symbol) ? "!" : "", name);
if (!value)
@@ -595,5 +595,6 @@ dump_symbol_CB (m4_symbol_table *symtab, const char *name,
break;
}
fputc ('\n', stderr);
+ return NULL;
}
#endif /* DEBUG_SYM */