[patch] *scanf: Allow language-dependent radix character
Craig Howland
howland@LGSInnovations.com
Tue Dec 17 22:53:00 GMT 2013
On 12/17/2013 04:54 PM, Corinna Vinschen wrote:
>
> If you wonder about the (unsigned char) casts, these are necessary
> because the variable 'c' is of type signed int, which breaks the
> comparison for non-ASCII char values without the cast.
>
> The code creating the decpt value at the start of vfwscanf is the same
> code as in vfwprintf.
>
>
> Thanks for any review,
> Corinna
>
>
> * vfscanf.c (__SVFSCANF_R): Handle radix char language-dependent
> per POSIX.
> (__SVFWSCANF_R): Ditto.
>
>
> Index: libc/stdio/vfscanf.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/stdio/vfscanf.c,v
> retrieving revision 1.54
> diff -u -p -r1.54 vfscanf.c
> --- libc/stdio/vfscanf.c 29 Apr 2013 21:06:23 -0000 1.54
> +++ libc/stdio/vfscanf.c 17 Dec 2013 21:51:21 -0000
> @@ -162,6 +162,7 @@ Supporting OS subroutines required:
> #ifdef FLOATING_POINT
> ...
> + if (decptpos > 0)
> + {
> + /* We read part of a multibyte decimal point,
> + but the rest is invalid or we're at EOF,
> + so back off. */
> + while (decptpos-- > 0)
> + {
> + _ungetc_r (rptr, decpt[decptpos], fp);
Shouldn't it be (unsigned char) decpt[decptpos] here, too? (The same probably
goes for the other unget. Our ungetc directly warns against giving back a
signed char.)
Craig
More information about the Newlib
mailing list