GNU bug report logs - #5996
[PATCH] base64: always treat input in binary mode

Previous Next

Package: coreutils;

Reported by: Eric Blake <eblake <at> redhat.com>

Date: Wed, 21 Apr 2010 14:24:02 UTC

Severity: normal

Tags: patch

Merged with 5994

Done: Jim Meyering <jim <at> meyering.net>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Eric Blake <eblake <at> redhat.com>
To: 5994 <at> debbugs.gnu.org
Cc: yasai-itame1942 <at> jade.plala.or.jp
Subject: bug#5996: [PATCH] base64: always treat input in binary mode
Date: Wed, 21 Apr 2010 08:23:00 -0600
Necessary for cygwin.  Technically, this patch is not correct,
in that it clobbers O_APPEND, but it is no different than any
other use of xfreopen to force binary mode, so all such uses
should be fixed at once in a later patch.

* src/base64.c (main): Open input in binary mode.
* THANKS: Update.
Reported by Yutaka Amanai.
---

> base64 doesn't call freopen() nor setmode() against stdin, and doesn't
> give "rb" flag to fopen(). So, base64 sometimes fails to encode data
> correctly on some environment. For example, zsh on Cygwin forces stdin
> to be text-mode.

Thanks for the report.  I'll commit this later today if there are no
objections; it should have no impact for any platform that does not
have O_BINARY, and although it is not perfect on Cygwin, it is not
too much to add to my workload for creating the cygwin port of coreutils
8.5.  And someday I'll get around to creating the new gnulib interface
for gracefully enforcing binary streams without clobbering O_APPEND.

 src/base64.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/base64.c b/src/base64.c
index 34569ec..41e9dea 100644
--- a/src/base64.c
+++ b/src/base64.c
@@ -29,6 +29,7 @@
 #include "xstrtol.h"
 #include "quote.h"
 #include "quotearg.h"
+#include "xfreopen.h"

 #include "base64.h"

@@ -289,10 +290,14 @@ main (int argc, char **argv)
     infile = "-";

   if (STREQ (infile, "-"))
-    input_fh = stdin;
+    {
+      if (O_BINARY)
+        xfreopen (NULL, "rb", stdin);
+      input_fh = stdin;
+    }
   else
     {
-      input_fh = fopen (infile, "r");
+      input_fh = fopen (infile, "rb");
       if (input_fh == NULL)
         error (EXIT_FAILURE, errno, "%s", infile);
     }
-- 
1.6.6.1






This bug report was last modified 15 years and 34 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.