improve stream handling of read and write errors - json2tsv - JSON to TSV converter
(HTM) git clone git://git.codemadness.org/json2tsv
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit ca7aea61b3a593c782c7da48ec3e6552b47a698e
(DIR) parent eb921bbad3f1120270014eaad9b2cba8a2958130
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sat, 19 Mar 2022 13:10:53 +0100
improve stream handling of read and write errors
Diffstat:
M json2tsv.1 | 4 ++--
M json2tsv.c | 14 ++++++++++++++
2 files changed, 16 insertions(+), 2 deletions(-)
---
(DIR) diff --git a/json2tsv.1 b/json2tsv.1
@@ -1,4 +1,4 @@
-.Dd February 20, 2022
+.Dd March 19, 2022
.Dt JSON2TSV 1
.Os
.Sh NAME
@@ -101,7 +101,7 @@ s for string
.Sh EXIT STATUS
.Nm
exits with the exit status 0 on success, 1 on a parse error, 2 when out of
-memory or 3 with an usage error.
+memory or a read/write error or 3 with an usage error.
.Sh EXAMPLES
.Bd -literal
json2tsv < input.json | awk -F '\\t' '$1 == ".url" { print $3 }'
(DIR) diff --git a/json2tsv.c b/json2tsv.c
@@ -110,6 +110,11 @@ processnode(struct json_node *nodes, size_t depth, const char *value)
putchar(fs);
printvalue(value);
putchar(rs);
+
+ if (ferror(stdout)) {
+ fprintf(stderr, "write error: <stdout>\n");
+ exit(2);
+ }
}
int
@@ -217,5 +222,14 @@ nextarg:;
return 1;
}
+ if (ferror(stdin)) {
+ fprintf(stderr, "read error: <stdin>\n");
+ return 2;
+ }
+ if (fflush(stdout) || ferror(stdout)) {
+ fprintf(stderr, "write error: <stdout>\n");
+ return 2;
+ }
+
return 0;
}