[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#5996: [PATCH] base64: always treat input in binary mode
From: |
Glenn Morris |
Subject: |
bug#5996: [PATCH] base64: always treat input in binary mode |
Date: |
Thu, 22 Apr 2010 13:00:26 -0400 |
User-agent: |
Gnus (www.gnus.org), GNU Emacs (www.gnu.org/software/emacs/) |
Hi,
The following message got resent to bug-gnu-emacs rather than
bug-coreutils, because debbugs got confused.
We can discuss the reasons on help-debbugs if anyone is interested.
(Short answer: it looks like the mail you sent had two separate To:
headers, and a changed Subject: header with no bug number, both of
which confused debbugs. It may be possible to improve this a bit.)
Eric Blake wrote:
> 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