diff options
author | Jim Meyering <jim@meyering.net> | 2003-09-22 15:59:29 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2003-09-22 15:59:29 +0000 |
commit | 8a0be33fd7cf9b7e2a11ad4a0d093ee4c886ea80 (patch) | |
tree | b9ad486eaf29906836c94c39d81528999d57454b | |
parent | afd3a1e0662bc1ec1ccf779f2fbd2562decea519 (diff) | |
download | coreutils-8a0be33fd7cf9b7e2a11ad4a0d093ee4c886ea80.tar.xz |
(check_file): Report error right away if I/O fails,
so that the proper errno value is used.
(check_file): Check for ferror (stdout) even if ostream == stdout.
(check_file): Don't report bogus errno value
after ferror discovers an output error. We don't know the proper
errno value, since it might have been caused by any of a whole
bunch of calls, and it might have been trashed in the meantime.
Fixing this problem will require much more extensive changes;
in the meantime just say "write error".
-rw-r--r-- | src/uniq.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/uniq.c b/src/uniq.c index 8a5e5c9dc..85c45e200 100644 --- a/src/uniq.c +++ b/src/uniq.c @@ -335,7 +335,11 @@ check_file (const char *infile, const char *outfile) char *thisfield; size_t thislen; if (readlinebuffer (thisline, istream) == 0) - break; + { + if (ferror (istream)) + goto closefiles; + break; + } thisfield = find_field (thisline); thislen = thisline->length - 1 - (thisfield - thisline->buffer); match = !different (thisfield, prevfield, thislen, prevlen); @@ -377,9 +381,11 @@ check_file (const char *infile, const char *outfile) if (ferror (istream) || fclose (istream) == EOF) error (EXIT_FAILURE, errno, _("error reading %s"), infile); + if (ferror (ostream)) + error (EXIT_FAILURE, 0, _("error writing %s"), outfile); /* Close ostream only if it's not stdout -- the latter is closed via the atexit-invoked close_stdout. */ - if (ostream != stdout && (ferror (ostream) || fclose (ostream) == EOF)) + if (ostream != stdout && fclose (ostream) != 0) error (EXIT_FAILURE, errno, _("error writing %s"), outfile); free (lb1.buffer); |