show: Handle read and write errors
authorAustin Clements <amdragon@MIT.EDU>
Thu, 19 Jan 2012 22:29:18 +0000 (17:29 -0500)
committerDavid Bremner <bremner@debian.org>
Sat, 21 Jan 2012 12:47:08 +0000 (08:47 -0400)
For showing a message in raw format, rather than silently succeeding
when a read or a write fails (or, probably, looping if a read fails),
try to print an error message and exit with a non-zero status.

This silences one of the buildbot warnings about unused results.  While
my libc lacks the declarations that trigger these warnings, this can
be tested by adding the following to notmuch.h:

__attribute__((warn_unused_result))
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

notmuch-show.c

index d14dac976e33d596565721fcd3616e8f12c814f4..c674e2506ff73270f4e43cd3937078ad3aa1b38b 100644 (file)
@@ -883,7 +883,17 @@ do_show_single (void *ctx,
 
        while (!feof (file)) {
            size = fread (buf, 1, sizeof (buf), file);
-           (void) fwrite (buf, size, 1, stdout);
+           if (ferror (file)) {
+               fprintf (stderr, "Error: Read failed from %s\n", filename);
+               fclose (file);
+               return 1;
+           }
+
+           if (fwrite (buf, size, 1, stdout) != 1) {
+               fprintf (stderr, "Error: Write failed\n");
+               fclose (file);
+               return 1;
+           }
        }
 
        fclose (file);