jshn: add error handling and fix memory leak in jshn_format().
Though currently jshn is more a one-shot data transformation tool and won't leak much memory in its lifetime, people may use it as example code, so do it right. Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
This commit is contained in:
parent
7f1ce63a84
commit
8c6dadbe03
1 changed files with 18 additions and 5 deletions
23
jshn.c
23
jshn.c
|
@ -258,18 +258,31 @@ static int jshn_format(bool no_newline, bool indent)
|
||||||
{
|
{
|
||||||
json_object *obj;
|
json_object *obj;
|
||||||
const char *output;
|
const char *output;
|
||||||
|
char *blobmsg_output = NULL;
|
||||||
|
int ret = -1;
|
||||||
|
|
||||||
|
if (!(obj = json_object_new_object()))
|
||||||
|
return -1;
|
||||||
|
|
||||||
obj = json_object_new_object();
|
|
||||||
jshn_add_objects(obj, "J_V", false);
|
jshn_add_objects(obj, "J_V", false);
|
||||||
output = json_object_to_json_string(obj);
|
if (!(output = json_object_to_json_string(obj)))
|
||||||
|
goto out;
|
||||||
|
|
||||||
if (indent) {
|
if (indent) {
|
||||||
blob_buf_init(&b, 0);
|
blob_buf_init(&b, 0);
|
||||||
blobmsg_add_json_from_string(&b, output);
|
if (!blobmsg_add_json_from_string(&b, output))
|
||||||
output = blobmsg_format_json_indent(b.head, 1, 0);
|
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");
|
fprintf(stdout, "%s%s", output, no_newline ? "" : "\n");
|
||||||
|
free(blobmsg_output);
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
|
out:
|
||||||
json_object_put(obj);
|
json_object_put(obj);
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int usage(const char *progname)
|
static int usage(const char *progname)
|
||||||
|
|
Loading…
Reference in a new issue