X-Git-Url: https://jxself.org/git/?p=carl9170fw.git;a=blobdiff_plain;f=config%2Fpreprocess.c;fp=config%2Fpreprocess.c;h=d103683b386edc551ffc526d28bf74434856d7b1;hp=46487fe6b36cd99e9ea04cc0bc2cbe7708b98121;hb=dd88a7e5b482637a26c67ffa1cdf7ebed204161d;hpb=b68427cdb960942fede090e843b046749a0789f3 diff --git a/config/preprocess.c b/config/preprocess.c index 46487fe..d103683 100644 --- a/config/preprocess.c +++ b/config/preprocess.c @@ -185,6 +185,7 @@ static LIST_HEAD(variable_list); struct variable { char *name; char *value; + enum variable_flavor flavor; struct list_head node; }; @@ -203,15 +204,22 @@ static struct variable *variable_lookup(const char *name) static char *variable_expand(const char *name, int argc, char *argv[]) { struct variable *v; + char *res; v = variable_lookup(name); if (!v) return NULL; - return expand_string_with_args(v->value, argc, argv); + if (v->flavor == VAR_RECURSIVE) + res = expand_string_with_args(v->value, argc, argv); + else + res = xstrdup(v->value); + + return res; } -void variable_add(const char *name, const char *value) +void variable_add(const char *name, const char *value, + enum variable_flavor flavor) { struct variable *v; @@ -224,7 +232,12 @@ void variable_add(const char *name, const char *value) list_add_tail(&v->node, &variable_list); } - v->value = xstrdup(value); + v->flavor = flavor; + + if (flavor == VAR_SIMPLE) + v->value = expand_string(value); + else + v->value = xstrdup(value); } static void variable_del(struct variable *v)