Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.openwrt.org/project/libubox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/jshn.c
diff options
context:
space:
mode:
authorRoman Yeryomin <roman@advem.lv>2019-09-14 01:22:48 +0300
committerJohn Crispin <john@phrozen.org>2019-10-21 15:21:41 +0300
commiteb30a03048f83e733a9530b5741808d7d0932ff2 (patch)
treeb5886ceb01f5ba0073a93f88361fab7fb0d07f8c /jshn.c
parentecf56174da9614a0b3107d33def463eefb4d7785 (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.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/jshn.c b/jshn.c
index 24e3265..0aa120c 100644
--- a/jshn.c
+++ b/jshn.c
@@ -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;