Check for errors when writing the dump file to standard output, so
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Tue, 10 Nov 2009 19:06:11 +0000 (19:06 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Tue, 10 Nov 2009 19:06:11 +0000 (19:06 +0000)
that we'll terminate promptly in cases of (for instance) a disk
filling up.

git-svn-id: svn://svn.tartarus.org/sgt/agedu@8744 cda61777-01e9-0310-a592-d414129be87e

agedu.c

diff --git a/agedu.c b/agedu.c
index add92ac..b253f18 100644 (file)
--- a/agedu.c
+++ b/agedu.c
@@ -56,14 +56,18 @@ struct ctx {
 static void dump_line(const char *pathname, const struct trie_file *tf)
 {
     const char *p;
-    printf("%llu %llu ", tf->size, tf->atime);
+    if (printf("%llu %llu ", tf->size, tf->atime) < 0) goto error;
     for (p = pathname; *p; p++) {
-       if (*p >= ' ' && *p < 127 && *p != '%')
-           putchar(*p);
-       else
-           printf("%%%02x", (unsigned char)*p);
+       if (*p >= ' ' && *p < 127 && *p != '%') {
+           if (putchar(*p) == EOF) goto error;
+       } else {
+           if (printf("%%%02x", (unsigned char)*p) < 0) goto error;
+       }
     }
-    putchar('\n');
+    if (putchar('\n') == EOF) goto error;
+    return;
+    error:
+    fatal("standard output: %s", strerror(errno));
 }
 
 static int gotdata(void *vctx, const char *pathname, const STRUCT_STAT *st)