summaryrefslogtreecommitdiff
path: root/src/sum.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2005-07-11 18:25:23 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2005-07-11 18:25:23 +0000
commited0dda33d553bfd17338d4bd9ccd6a8bd61489bd (patch)
treef3a23bbaed7f39870d0e6cae0fced9b9d31b82a2 /src/sum.c
parentb2b2956e017305410b463ee04d73aa069f1d0836 (diff)
downloadcoreutils-ed0dda33d553bfd17338d4bd9ccd6a8bd61489bd.tar.xz
(bsd_sum_file, sysv_sym_file):
Avoid setmode; use POSIX-specified routines instead.
Diffstat (limited to 'src/sum.c')
-rw-r--r--src/sum.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/sum.c b/src/sum.c
index 65170aa4c..92e412688 100644
--- a/src/sum.c
+++ b/src/sum.c
@@ -97,18 +97,18 @@ bsd_sum_file (const char *file, int print_name)
{
fp = stdin;
have_read_stdin = true;
+ if (O_BINARY && ! isatty (STDIN_FILENO))
+ freopen (NULL, "rb", stdin);
}
else
{
- fp = fopen (file, "r");
+ fp = fopen (file, (O_BINARY ? "rb" : "r"));
if (fp == NULL)
{
error (0, errno, "%s", file);
return false;
}
}
- /* Need binary I/O, or else byte counts and checksums are incorrect. */
- SET_BINARY (fileno(fp));
while ((ch = getc (fp)) != EOF)
{
@@ -165,18 +165,18 @@ sysv_sum_file (const char *file, int print_name)
{
fd = STDIN_FILENO;
have_read_stdin = true;
+ if (O_BINARY && ! isatty (STDIN_FILENO))
+ freopen (NULL, "rb", stdin);
}
else
{
- fd = open (file, O_RDONLY);
+ fd = open (file, O_RDONLY | O_BINARY);
if (fd == -1)
{
error (0, errno, "%s", file);
return false;
}
}
- /* Need binary I/O, or else byte counts and checksums are incorrect. */
- SET_BINARY (fd);
while (1)
{