GNU bug report logs -
#5996
[PATCH] base64: always treat input in binary mode
Previous Next
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
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
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.