X-Git-Url: http://git.archive.openwrt.org/?p=project%2Flibubox.git;a=blobdiff_plain;f=jshn.c;h=69cb06f91f75058fecfc9da92c05646398baad0d;hp=e7e02d19301f12fa158cb5a3bbe286e5d0850fd6;hb=13b5c1d4ca488575ee3dd4726b669f768fad8ffa;hpb=c8fc0897cdfff6393919030e24809e938ee5076f diff --git a/jshn.c b/jshn.c index e7e02d1..69cb06f 100644 --- a/jshn.c +++ b/jshn.c @@ -179,8 +179,8 @@ static char *get_keys(const char *prefix) { char *keys; - keys = alloca(var_prefix_len + strlen(prefix) + sizeof("KEYS_") + 1); - sprintf(keys, "%sKEYS_%s", var_prefix, prefix); + keys = alloca(var_prefix_len + strlen(prefix) + sizeof("K_") + 1); + sprintf(keys, "%sK_%s", var_prefix, prefix); return getenv(keys); } @@ -188,15 +188,15 @@ static void get_var(const char *prefix, const char **name, char **var, char **ty { char *tmpname, *varname; - tmpname = alloca(var_prefix_len + strlen(prefix) + 1 + strlen(*name) + 1 + sizeof("TYPE_")); + tmpname = alloca(var_prefix_len + strlen(prefix) + 1 + strlen(*name) + 1 + sizeof("T_")); sprintf(tmpname, "%s%s_%s", var_prefix, prefix, *name); *var = getenv(tmpname); - sprintf(tmpname, "%sTYPE_%s_%s", var_prefix, prefix, *name); + sprintf(tmpname, "%sT_%s_%s", var_prefix, prefix, *name); *type = getenv(tmpname); - sprintf(tmpname, "%sNAME_%s_%s", var_prefix, prefix, *name); + sprintf(tmpname, "%sN_%s_%s", var_prefix, prefix, *name); varname = getenv(tmpname); if (varname) *name = varname; @@ -258,18 +258,31 @@ static int jshn_format(bool no_newline, bool indent) { json_object *obj; const char *output; + char *blobmsg_output = NULL; + int ret = -1; + + if (!(obj = json_object_new_object())) + return -1; + + jshn_add_objects(obj, "J_V", false); + if (!(output = json_object_to_json_string(obj))) + goto out; - obj = json_object_new_object(); - jshn_add_objects(obj, "JSON_VAR", false); - output = json_object_to_json_string(obj); if (indent) { blob_buf_init(&b, 0); - blobmsg_add_json_from_string(&b, output); - output = blobmsg_format_json_indent(b.head, 1, 0); + if (!blobmsg_add_json_from_string(&b, output)) + goto out; + if (!(blobmsg_output = blobmsg_format_json_indent(b.head, 1, 0))) + goto out; + output = blobmsg_output; } fprintf(stdout, "%s%s", output, no_newline ? "" : "\n"); + free(blobmsg_output); + ret = 0; + +out: json_object_put(obj); - return 0; + return ret; } static int usage(const char *progname)