diff options
author | Felix Fietkau <nbd@openwrt.org> | 2011-09-11 13:40:22 +0400 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2011-09-11 13:40:22 +0400 |
commit | a1a97eb11e89c420b84a659a88a4e72c7f04367d (patch) | |
tree | 84b59196eb39fe845f182d88d0b34efef14db265 /jshn.c | |
parent | dee81b4f7902c5b59654f4e8fdbb153bb4f67c62 (diff) |
jshn: support using characters in elements that do not conform to shell variable restrictions
Diffstat (limited to 'jshn.c')
-rw-r--r-- | jshn.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -150,14 +150,19 @@ static char *get_keys(const char *prefix) return getenv(keys); } -static void get_var(const char *prefix, const char *name, char **var, char **type) +static void get_var(const char *prefix, const char **name, char **var, char **type) { - char *tmpname; + char *tmpname, *varname; - tmpname = alloca(strlen(prefix) + 1 + strlen(name) + 1 + sizeof("TYPE_")); - sprintf(tmpname, "TYPE_%s_%s", prefix, name); + tmpname = alloca(strlen(prefix) + 1 + strlen(*name) + 1 + sizeof("TYPE_")); + sprintf(tmpname, "TYPE_%s_%s", prefix, *name); *var = getenv(tmpname + 5); *type = getenv(tmpname); + + memcpy(tmpname, "NAME", 4); + varname = getenv(tmpname); + if (varname) + *name = varname; } static json_object *jshn_add_objects(json_object *obj, const char *prefix, bool array); @@ -167,7 +172,7 @@ static void jshn_add_object_var(json_object *obj, bool array, const char *prefix json_object *new; char *var, *type; - get_var(prefix, name, &var, &type); + get_var(prefix, &name, &var, &type); if (!var || !type) return; |