055f1c02d3
Upstream has a large number of patches lined up for the next 0.9.33.x bugfix release; http://git.uclibc.org/uClibc/log/?h=0.9.33 Add them here, as atleast some of them are quite critical (E.G. the eventfd issue gets triggered by recent glib versions). I've skipped the microblaze and xtensa fixes as we don't currently support those with 0.9.33.2. Drop uclibc-0002-Add-definition-of-MSG_WAITFORONE-and-MSG_CMSG_CMSG_CLOEXE.patch as that is a subset of uclibc-0035-socket.h-pull-socket_type.h-from-eglibc.patch Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
67 lines
1.9 KiB
Diff
67 lines
1.9 KiB
Diff
From 12846e741d925630a4079ac02290b28c6f00b887 Mon Sep 17 00:00:00 2001
|
|
From: Nathan Sidwell <nathan@codesourcery.com>
|
|
Date: Fri, 22 Mar 2013 17:46:52 +0100
|
|
Subject: [PATCH] Fix a problem with scanning wide chars.
|
|
|
|
We found that the testcase
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
wchar_t s[10];
|
|
memset (s, 0, sizeof (s));
|
|
int r = sscanf ("s", "%ls", s);
|
|
printf ("%d\n", r);
|
|
printf ("%ls\n", s);
|
|
return 0;
|
|
}
|
|
|
|
printed
|
|
0
|
|
<blankline>
|
|
|
|
rather than the expected
|
|
1
|
|
s
|
|
|
|
The problem was the enum in _scanf.c, which has had a 'CONV_m' value
|
|
inserted. The attached patch fixes the problem in __psfs_parse_spec by
|
|
not presuming a particular displacement between the two sets of
|
|
char-like conversion values. With this patch the above program produces
|
|
the expected output.
|
|
|
|
Signed-off-by: Nathan Sidwell <nathan@codesourcery.com>
|
|
Signed-off-by: Bernd Schmidt <bernds@codesourcery.com>
|
|
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
|
|
---
|
|
libc/stdio/_scanf.c | 6 +++---
|
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/libc/stdio/_scanf.c b/libc/stdio/_scanf.c
|
|
index 952853c..3848a09 100644
|
|
--- a/libc/stdio/_scanf.c
|
|
+++ b/libc/stdio/_scanf.c
|
|
@@ -429,8 +429,8 @@ libc_hidden_def(vswscanf)
|
|
/* npxXoudif eEgG CS cs[ */
|
|
/* NOTE: the 'm' flag must come before any convs that support it */
|
|
|
|
-/* NOTE: Ordering is important! In particular, CONV_LEFTBRACKET
|
|
- * must immediately precede CONV_c. */
|
|
+/* NOTE: Ordering is important! The CONV_{C,S,LEFTBRACKET} must map
|
|
+ simply to their lowercase equivalents. */
|
|
|
|
enum {
|
|
CONV_n = 0,
|
|
@@ -921,7 +921,7 @@ int attribute_hidden __psfs_parse_spec(register psfs_t *psfs)
|
|
psfs->dataargtype = PA_FLAG_LONG;
|
|
} else if ((p_m_spec_chars >= CONV_c)
|
|
&& (psfs->dataargtype & PA_FLAG_LONG)) {
|
|
- p_m_spec_chars -= 3; /* lc -> C, ls -> S, l[ -> ?? */
|
|
+ p_m_spec_chars -= CONV_c - CONV_C; /* lc -> C, ls -> S, l[ -> ?? */
|
|
}
|
|
|
|
psfs->conv_num = p_m_spec_chars;
|
|
--
|
|
1.7.10.4
|
|
|