|
@@ -879,59 +879,6 @@ struct symbol *sym_find(const char *name)
|
|
|
return symbol;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * Expand symbol's names embedded in the string given in argument. Symbols'
|
|
|
- * name to be expanded shall be prefixed by a '$'. Unknown symbol expands to
|
|
|
- * the empty string.
|
|
|
- */
|
|
|
-char *sym_expand_string_value(const char *in)
|
|
|
-{
|
|
|
- const char *src;
|
|
|
- char *res;
|
|
|
- size_t reslen;
|
|
|
-
|
|
|
- /*
|
|
|
- * Note: 'in' might come from a token that's about to be
|
|
|
- * freed, so make sure to always allocate a new string
|
|
|
- */
|
|
|
- reslen = strlen(in) + 1;
|
|
|
- res = xmalloc(reslen);
|
|
|
- res[0] = '\0';
|
|
|
-
|
|
|
- while ((src = strchr(in, '$'))) {
|
|
|
- char *p, name[SYMBOL_MAXLENGTH];
|
|
|
- const char *symval = "";
|
|
|
- struct symbol *sym;
|
|
|
- size_t newlen;
|
|
|
-
|
|
|
- strncat(res, in, src - in);
|
|
|
- src++;
|
|
|
-
|
|
|
- p = name;
|
|
|
- while (isalnum(*src) || *src == '_')
|
|
|
- *p++ = *src++;
|
|
|
- *p = '\0';
|
|
|
-
|
|
|
- sym = sym_find(name);
|
|
|
- if (sym != NULL) {
|
|
|
- sym_calc_value(sym);
|
|
|
- symval = sym_get_string_value(sym);
|
|
|
- }
|
|
|
-
|
|
|
- newlen = strlen(res) + strlen(symval) + strlen(src) + 1;
|
|
|
- if (newlen > reslen) {
|
|
|
- reslen = newlen;
|
|
|
- res = xrealloc(res, reslen);
|
|
|
- }
|
|
|
-
|
|
|
- strcat(res, symval);
|
|
|
- in = src;
|
|
|
- }
|
|
|
- strcat(res, in);
|
|
|
-
|
|
|
- return res;
|
|
|
-}
|
|
|
-
|
|
|
const char *sym_escape_string_value(const char *in)
|
|
|
{
|
|
|
const char *p;
|