diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2017-02-15 15:58:08 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2017-02-15 15:59:16 -0800 |
commit | 75aababed45d0120d44baa76c5107d0ceb71fc59 (patch) | |
tree | 5b4d628544b8640e489e356d881ff72ad6ff4db1 /src/head.c | |
parent | e5cfadd6c7fa08153e56b950e72801677f7d1fe8 (diff) | |
download | coreutils-75aababed45d0120d44baa76c5107d0ceb71fc59.tar.xz |
maint: use xsetmode, not xfreopen
This fixes a bug noted by Eric Blake. Code was using xfreopen to
change files to binary mode, but this fails for stdout when in
append mode. Such code should use xsetmode instead. This affects
only the port on platforms like MS-Windows which distiguish text
from binary I/O.
* bootstrap.conf (gnulib_modules):
Remove xfreopen and add xsetmode. Sort.
* src/base64.c (main):
* src/cat.c (main):
* src/cksum.c (cksum):
* src/head.c (head_file, main):
* src/md5sum.c (digest_file):
* src/od.c (open_next_file):
* src/split.c (main):
* src/sum.c (bsd_sum_file, sysv_sum_file):
* src/tac.c (tac_file, main):
* src/tail.c (tail_file):
* src/tee.c (tee_files):
* src/tr.c (main):
* src/wc.c (wc_file): Use xsetmode, not xfreopen.
Diffstat (limited to 'src/head.c')
-rw-r--r-- | src/head.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/src/head.c b/src/head.c index 7639ab974..49c942fea 100644 --- a/src/head.c +++ b/src/head.c @@ -37,8 +37,8 @@ #include "quote.h" #include "safe-read.h" #include "stat-size.h" -#include "xfreopen.h" #include "xdectoint.h" +#include "xsetmode.h" /* The official name of this program (e.g., no 'g' prefix). */ #define PROGRAM_NAME "head" @@ -878,8 +878,7 @@ head_file (const char *filename, uintmax_t n_units, bool count_lines, have_read_stdin = true; fd = STDIN_FILENO; filename = _("standard input"); - if (O_BINARY && ! isatty (STDIN_FILENO)) - xfreopen (NULL, "rb", stdin); + xsetmode (STDIN_FILENO, O_BINARY); } else { @@ -1083,8 +1082,7 @@ main (int argc, char **argv) ? (char const *const *) &argv[optind] : default_file_list); - if (O_BINARY && ! isatty (STDOUT_FILENO)) - xfreopen (NULL, "wb", stdout); + xsetmode (STDOUT_FILENO, O_BINARY); for (i = 0; file_list[i]; ++i) ok &= head_file (file_list[i], n_units, count_lines, elide_from_end); |