diff options
author | Sami Kerola | 2012-04-04 19:39:15 +0200 |
---|---|---|
committer | Sami Kerola | 2012-04-04 19:45:41 +0200 |
commit | b87cbe8486a2799a137c8100afaa05b352bb0ccf (patch) | |
tree | c8e0653333e146b91460e74c3902652c5eb9e024 /text-utils | |
parent | include: add stream error checking facility (diff) | |
download | kernel-qcow2-util-linux-b87cbe8486a2799a137c8100afaa05b352bb0ccf.tar.gz kernel-qcow2-util-linux-b87cbe8486a2799a137c8100afaa05b352bb0ccf.tar.xz kernel-qcow2-util-linux-b87cbe8486a2799a137c8100afaa05b352bb0ccf.zip |
text-utils: verify writing to streams was successful
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'text-utils')
-rw-r--r-- | text-utils/col.c | 4 | ||||
-rw-r--r-- | text-utils/colcrt.c | 4 | ||||
-rw-r--r-- | text-utils/colrm.c | 5 | ||||
-rw-r--r-- | text-utils/column.c | 5 | ||||
-rw-r--r-- | text-utils/hexdump.c | 2 | ||||
-rw-r--r-- | text-utils/more.c | 18 | ||||
-rw-r--r-- | text-utils/pg.c | 2 | ||||
-rw-r--r-- | text-utils/rev.c | 2 | ||||
-rw-r--r-- | text-utils/tailf.c | 2 | ||||
-rw-r--r-- | text-utils/ul.c | 5 |
10 files changed, 29 insertions, 20 deletions
diff --git a/text-utils/col.c b/text-utils/col.c index baec1945a..dc9e9c8b2 100644 --- a/text-utils/col.c +++ b/text-utils/col.c @@ -56,6 +56,7 @@ #include "xalloc.h" #include "widechar.h" #include "strutils.h" +#include "closestream.h" #define BS '\b' /* backspace */ #define TAB '\t' /* tab */ @@ -174,6 +175,7 @@ int main(int argc, char **argv) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); + atexit(close_stdout); max_bufd_lines = 128 * 2; compress_spaces = 1; /* compress spaces into tabs */ @@ -388,8 +390,6 @@ int main(int argc, char **argv) /* missing a \n on the last line? */ nblank_lines = 2; flush_blanks(); - if (ferror(stdout) || fclose(stdout)) - return EXIT_FAILURE; return ret; } diff --git a/text-utils/colcrt.c b/text-utils/colcrt.c index d9806515e..3393d0cf3 100644 --- a/text-utils/colcrt.c +++ b/text-utils/colcrt.c @@ -47,6 +47,7 @@ #include "widechar.h" #include "c.h" +#include "closestream.h" int plus(wchar_t c, wchar_t d); void move(int l, int m); @@ -93,6 +94,7 @@ int main(int argc, char **argv) { setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); + atexit(close_stdout); /* Take care of lonely hyphen option. */ for (i = 0; i < argc; i++) @@ -141,8 +143,6 @@ int main(int argc, char **argv) { fclose(f); } while (argc > 0); fflush(stdout); - if (ferror(stdout) || fclose(stdout)) - return EXIT_FAILURE; return EXIT_SUCCESS; } diff --git a/text-utils/colrm.c b/text-utils/colrm.c index d454643a0..910d933a2 100644 --- a/text-utils/colrm.c +++ b/text-utils/colrm.c @@ -41,11 +41,13 @@ #include <stdio.h> #include <stdlib.h> #include <getopt.h> +#include <unistd.h> #include "nls.h" #include "widechar.h" #include "strutils.h" #include "c.h" +#include "closestream.h" /* COLRM removes unwanted columns from a file @@ -162,6 +164,7 @@ int main(int argc, char **argv) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); + atexit(close_stdout); while ((opt = getopt_long(argc, argv, "bfhl:pxVH", longopts, @@ -187,7 +190,5 @@ int main(int argc, char **argv) ; fflush(stdout); - if (ferror(stdout) || fclose(stdout)) - return EXIT_FAILURE; return EXIT_SUCCESS; } diff --git a/text-utils/column.c b/text-utils/column.c index 9d5befc13..b210a9381 100644 --- a/text-utils/column.c +++ b/text-utils/column.c @@ -55,6 +55,7 @@ #include "c.h" #include "xalloc.h" #include "strutils.h" +#include "closestream.h" #ifdef HAVE_WIDECHAR #define wcs_width(s) wcswidth(s,wcslen(s)) @@ -131,6 +132,7 @@ int main(int argc, char **argv) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); + atexit(close_stdout); if (ioctl(STDIN_FILENO, TIOCGWINSZ, &win) == -1 || !win.ws_col) { char *p; @@ -203,9 +205,6 @@ int main(int argc, char **argv) free(list[i]); free(list); - if (ferror(stdout) || fclose(stdout)) - eval += EXIT_FAILURE; - if (eval == 0) return EXIT_SUCCESS; else diff --git a/text-utils/hexdump.c b/text-utils/hexdump.c index 7edb053db..6f5335900 100644 --- a/text-utils/hexdump.c +++ b/text-utils/hexdump.c @@ -43,6 +43,7 @@ #include "nls.h" #include "c.h" +#include "closestream.h" FS *fshead; /* head of format strings */ int blocksize; /* data block size */ @@ -57,6 +58,7 @@ int main(int argc, char **argv) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); + atexit(close_stdout); if (!(p = strrchr(argv[0], 'o')) || strcmp(p, "od")) { newsyntax(argc, &argv); diff --git a/text-utils/more.c b/text-utils/more.c index 32eb765e9..aa1e4cc5c 100644 --- a/text-utils/more.c +++ b/text-utils/more.c @@ -56,11 +56,12 @@ #include <sys/stat.h> #include <sys/file.h> #include <sys/wait.h> -#include "strutils.h" +#include "strutils.h" #include "nls.h" #include "xalloc.h" #include "widechar.h" +#include "closestream.h" #define _REGEX_RE_COMP #include <regex.h> @@ -90,7 +91,7 @@ void doclear(void); void cleareol(void); void clreos(void); void home(void); -void error (char *mess); +void more_error (char *mess); void do_shell (char *filename); int colon (char *filename, int cmd, int nlines); int expand (char **outbuf, char *inbuf); @@ -330,6 +331,7 @@ int main(int argc, char **argv) { setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); + atexit(close_stdout); nfiles = argc; fnames = argv; @@ -1589,7 +1591,7 @@ void search(char buf[], FILE *file, register int n) context.chrctr = startline; lncount = 0; if ((s = re_comp (buf)) != 0) - error (s); + more_error (s); while (!feof (file)) { line3 = line2; line2 = line1; @@ -1632,7 +1634,7 @@ void search(char buf[], FILE *file, register int n) break; } } else if (rv == -1) - error (_("Regular expression botch")); + more_error (_("Regular expression botch")); } if (feof (file)) { if (!no_intty) { @@ -1643,7 +1645,7 @@ void search(char buf[], FILE *file, register int n) putsout(_("\nPattern not found\n")); end_it (0); } - error (_("Pattern not found")); + more_error (_("Pattern not found")); } } @@ -2025,7 +2027,7 @@ void ttyin (char buf[], register int nmax, char pchar) { *--sp = '\0'; if (!eraseln) promptlen = maxlen; if (sp - buf >= nmax - 1) - error (_("Line too long")); + more_error (_("Line too long")); } /* return: 0 - unchanged, 1 - changed, -1 - overflow (unchanged) */ @@ -2060,7 +2062,7 @@ int expand (char **outbuf, char *inbuf) { break; case '!': if (!shellp) - error (_("No previous command to substitute for")); + more_error (_("No previous command to substitute for")); strcpy (outstr, shell_line); outstr += strlen (shell_line); changed++; @@ -2089,7 +2091,7 @@ void show (char c) { promptlen++; } -void error (char *mess) +void more_error (char *mess) { if (clreol) cleareol (); diff --git a/text-utils/pg.c b/text-utils/pg.c index b61b1504f..2b5144252 100644 --- a/text-utils/pg.c +++ b/text-utils/pg.c @@ -63,6 +63,7 @@ #include "xalloc.h" #include "widechar.h" #include "writeall.h" +#include "closestream.h" #define READBUF LINE_MAX /* size of input buffer */ #define CMDBUF 255 /* size of command buffer */ @@ -1594,6 +1595,7 @@ main(int argc, char **argv) setlocale(LC_MESSAGES, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); + atexit(close_stdout); if (tcgetattr(1, &otio) == 0) { ontty = 1; diff --git a/text-utils/rev.c b/text-utils/rev.c index 8a1666800..3c64c12d1 100644 --- a/text-utils/rev.c +++ b/text-utils/rev.c @@ -62,6 +62,7 @@ #include "xalloc.h" #include "widechar.h" #include "c.h" +#include "closestream.h" wchar_t *buf; @@ -96,6 +97,7 @@ int main(int argc, char *argv[]) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); + atexit(close_stdout); signal(SIGINT, sig_handler); signal(SIGTERM, sig_handler); diff --git a/text-utils/tailf.c b/text-utils/tailf.c index c8f3e91db..10589d8bc 100644 --- a/text-utils/tailf.c +++ b/text-utils/tailf.c @@ -45,6 +45,7 @@ #include "usleep.h" #include "strutils.h" #include "c.h" +#include "closestream.h" #define DEFAULT_LINES 10 @@ -240,6 +241,7 @@ int main(int argc, char **argv) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); + atexit(close_stdout); static const struct option longopts[] = { { "lines", required_argument, 0, 'n' }, diff --git a/text-utils/ul.c b/text-utils/ul.c index 6132166d0..c15e48091 100644 --- a/text-utils/ul.c +++ b/text-utils/ul.c @@ -54,6 +54,7 @@ #include "xalloc.h" #include "widechar.h" #include "c.h" +#include "closestream.h" #ifdef HAVE_WIDECHAR /* Output an ASCII character as a wide character */ @@ -162,6 +163,7 @@ int main(int argc, char **argv) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); + atexit(close_stdout); signal(SIGINT, sig_handler); signal(SIGTERM, sig_handler); @@ -231,9 +233,6 @@ int main(int argc, char **argv) filter(f); fclose(f); } - if (ferror(stdout) || fclose(stdout)) - return EXIT_FAILURE; - free(obuf); return EXIT_SUCCESS; } |