summaryrefslogtreecommitdiff
path: root/src/cat.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2017-02-15 15:58:08 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2017-02-15 15:59:16 -0800
commit75aababed45d0120d44baa76c5107d0ceb71fc59 (patch)
tree5b4d628544b8640e489e356d881ff72ad6ff4db1 /src/cat.c
parente5cfadd6c7fa08153e56b950e72801677f7d1fe8 (diff)
downloadcoreutils-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/cat.c')
-rw-r--r--src/cat.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/cat.c b/src/cat.c
index 001408576..fba721f28 100644
--- a/src/cat.c
+++ b/src/cat.c
@@ -39,7 +39,7 @@
#include "fadvise.h"
#include "full-write.h"
#include "safe-read.h"
-#include "xfreopen.h"
+#include "xsetmode.h"
/* The official name of this program (e.g., no 'g' prefix). */
#define PROGRAM_NAME "cat"
@@ -645,8 +645,7 @@ main (int argc, char **argv)
if (! (number || show_ends || squeeze_blank))
{
file_open_mode |= O_BINARY;
- if (O_BINARY && ! isatty (STDOUT_FILENO))
- xfreopen (NULL, "wb", stdout);
+ xsetmode (STDOUT_FILENO, O_BINARY);
}
/* Check if any of the input files are the same as the output file. */
@@ -665,8 +664,8 @@ main (int argc, char **argv)
{
have_read_stdin = true;
input_desc = STDIN_FILENO;
- if ((file_open_mode & O_BINARY) && ! isatty (STDIN_FILENO))
- xfreopen (NULL, "rb", stdin);
+ if (file_open_mode & O_BINARY)
+ xsetmode (STDIN_FILENO, O_BINARY);
}
else
{