summaryrefslogtreecommitdiff
path: root/src/uniq.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2003-09-22 15:59:29 +0000
committerJim Meyering <jim@meyering.net>2003-09-22 15:59:29 +0000
commit8a0be33fd7cf9b7e2a11ad4a0d093ee4c886ea80 (patch)
treeb9ad486eaf29906836c94c39d81528999d57454b /src/uniq.c
parentafd3a1e0662bc1ec1ccf779f2fbd2562decea519 (diff)
downloadcoreutils-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".
Diffstat (limited to 'src/uniq.c')
-rw-r--r--src/uniq.c10
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);