diff options
author | Roman Yeryomin <roman@advem.lv> | 2019-09-14 01:22:48 +0300 |
---|---|---|
committer | John Crispin <john@phrozen.org> | 2019-10-21 15:21:41 +0300 |
commit | eb30a03048f83e733a9530b5741808d7d0932ff2 (patch) | |
tree | b5886ceb01f5ba0073a93f88361fab7fb0d07f8c /jshn.c | |
parent | ecf56174da9614a0b3107d33def463eefb4d7785 (diff) |
libubox, jshn: add option to write output to a file
This would allow board_config_flush to run one command instead
of two and would be faster and safer than redirecting output
and moving a file between filesystems.
Originally discussed here:
http://lists.openwrt.org/pipermail/openwrt-devel/2017-December/010127.html
Signed-off-by: Roman Yeryomin <roman@advem.lv>
Diffstat (limited to 'jshn.c')
-rw-r--r-- | jshn.c | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -275,7 +275,7 @@ out: return obj; } -static int jshn_format(bool no_newline, bool indent) +static int jshn_format(bool no_newline, bool indent, FILE *stream) { json_object *obj; const char *output; @@ -297,7 +297,7 @@ static int jshn_format(bool no_newline, bool indent) goto out; output = blobmsg_output; } - fprintf(stdout, "%s%s", output, no_newline ? "" : "\n"); + fprintf(stream, "%s%s", output, no_newline ? "" : "\n"); free(blobmsg_output); ret = 0; @@ -342,6 +342,7 @@ int main(int argc, char **argv) int i; int ch; int fd; + FILE *fp = NULL; struct stat sb; char *fbuf; int ret; @@ -366,7 +367,7 @@ int main(int argc, char **argv) avl_insert(&env_vars, &vars[i].avl); } - while ((ch = getopt(argc, argv, "p:nir:R:w")) != -1) { + while ((ch = getopt(argc, argv, "p:nir:R:o:w")) != -1) { switch(ch) { case 'p': var_prefix = optarg; @@ -400,7 +401,16 @@ int main(int argc, char **argv) close(fd); return ret; case 'w': - return jshn_format(no_newline, indent); + return jshn_format(no_newline, indent, stdout); + case 'o': + fp = fopen(optarg, "w"); + if (!fp) { + fprintf(stderr, "Error opening %s\n", optarg); + return 3; + } + jshn_format(no_newline, indent, fp); + fclose(fp); + return 0; case 'n': no_newline = true; break; |