summaryrefslogtreecommitdiff
path: root/m4/module.c
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2007-11-28 06:45:20 -0700
committerEric Blake <ebb9@byu.net>2007-11-28 22:07:29 -0700
commit8e1fad3c14b6308edd5f61c1f8f0d5a0e6591547 (patch)
treebb8cf6c869bbd429f30ad8d49886beaa74bda991 /m4/module.c
parent5d2ce0f461d5d77cf098fefddaa2ac9c15a95a4b (diff)
downloadm4-8e1fad3c14b6308edd5f61c1f8f0d5a0e6591547.tar.gz
Stage 3a: cache length, rather than computing it, in libm4.
* m4/m4module.h (struct m4_macro_args): Cache length. (m4_get_symbol_len, m4_get_symbol_value_len): New accessors. (m4_set_symbol_value_text): Change signature. * m4/m4private.h (struct m4_symbol_value): Store string length. (m4_get_symbol_value_text, m4_get_symbol_value_placeholder) (m4_set_symbol_value_placeholder): Update accordingly. (m4_set_symbol_value_text): Change signature. (m4_get_symbol_value_len): New accessor. * m4/input.c (struct m4_input_block, string_peek, string_read) (string_unget, string_print, m4_push_string_finish) (m4_push_wrapup): Track length of string input. (m4__next_token): Adjust all users of symbol text to track length, too. * m4/macro.c (expand_argument, collect_arguments): Likewise. * m4/module.c (install_macro_table): Likewise. * modules/gnu.c (builtin, indir): Likewise. * modules/m4.c (define, pushdef): Likewise. * src/main.c (main): Likewise. * src/freeze.c (reload_frozen_state): Likewise. * m4/symtab.c (m4_symbol_value_copy): Likewise. (m4_get_symbol_value_len): New function. (m4_get_symbol_value_text, m4_get_symbol_value_placeholder) (m4_set_symbol_value_text, m4_set_symbol_value_placeholder): Adjust implementation. Signed-off-by: Eric Blake <ebb9@byu.net>
Diffstat (limited to 'm4/module.c')
-rw-r--r--m4/module.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/m4/module.c b/m4/module.c
index 4a65dbdb..afeece4f 100644
--- a/m4/module.c
+++ b/m4/module.c
@@ -193,8 +193,9 @@ install_macro_table (m4 *context, m4_module *module)
for (; mp->name != NULL; mp++)
{
m4_symbol_value *value = m4_symbol_value_create ();
+ size_t len = strlen (mp->value);
- m4_set_symbol_value_text (value, xstrdup (mp->value));
+ m4_set_symbol_value_text (value, xmemdup (mp->value, len + 1), len);
VALUE_MODULE (value) = module;
m4_symbol_pushdef (M4SYMTAB, mp->name, value);