diff options
Diffstat (limited to 'src/meta.c')
-rw-r--r-- | src/meta.c | 48 |
1 files changed, 26 insertions, 22 deletions
@@ -50,11 +50,12 @@ find_expansion_word (const char *kw, size_t len, } char * -meta_expand_string (const char *string, struct metadef *def, void *data) +meta_expand_string (const char *string, struct metadef *def, void *data, + struct access_method *method, void *handle) { const char *p, *s; char *res; - struct obstack stk; + struct obstack stk; if (!string) return NULL; @@ -81,7 +82,17 @@ meta_expand_string (const char *string, struct metadef *def, void *data) e = strchr (p + 1, '}'); if (e && (s = find_expansion_word (p + 1, e - p - 1, def, data))) { - obstack_grow (&stk, s, strlen (s)); + if (method) + { + char *newval; + size_t len; + /* FIXME: Return value? */ + method_quote_string (method, handle, s, &newval, &len); + obstack_grow (&stk, newval, len); + free (newval); + } + else + obstack_grow (&stk, s, strlen (s)); p = e + 1; } else @@ -99,7 +110,18 @@ meta_expand_string (const char *string, struct metadef *def, void *data) s = p - 1; len = 1; } - obstack_grow (&stk, s, len); + + if (method) + { + char *newval; + size_t len; + /* FIXME: Return value? */ + method_quote_string (method, handle, s, &newval, &len); + obstack_grow (&stk, newval, len); + free (newval); + } + else + obstack_grow (&stk, s, len); p++; } } @@ -113,24 +135,6 @@ meta_expand_string (const char *string, struct metadef *def, void *data) } void -meta_escape (struct access_method *method, void *handle, struct metadef *def) -{ - for (; def->kw; def++) - { - if (def->value) - { - char *newval; - - /* FIXME: Return value? */ - method_quote_string (method, handle, def->value, &newval, NULL); - if (def->storage) - free (def->storage); - def->value = def->storage = newval; - } - } -} - -void meta_free (struct metadef *def) { for (; def->kw; def++) |