From 8a0be33fd7cf9b7e2a11ad4a0d093ee4c886ea80 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Mon, 22 Sep 2003 15:59:29 +0000 Subject: (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". --- src/uniq.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src') 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); -- cgit v1.2.3-54-g00ecf