OSDN Git Service

wchar: bug #1471: fix cornercase in mbrtowc
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Wed, 24 Nov 2010 19:51:46 +0000 (20:51 +0100)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Wed, 24 Nov 2010 19:52:26 +0000 (20:52 +0100)
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
libc/misc/wchar/wchar.c
test/.gitignore
test/locale-mbwc/Makefile.in
test/locale-mbwc/tst2_mbrtowc.c [new file with mode: 0644]

index 7380ac9..ab6c617 100644 (file)
@@ -286,6 +286,8 @@ size_t mbrtowc(wchar_t *__restrict pwc, const char *__restrict s,
                s = empty_string;
                n = 1;
        } else if (*s == '\0') {
+               if (pwc)
+                       *pwc = '\0';
        /* According to the ISO C 89 standard this is the expected behaviour.  */
                return 0;
        } else if (!n) {
index a4af61d..ffef258 100644 (file)
@@ -96,6 +96,7 @@ locale-mbwc/tst_wctomb
 locale-mbwc/tst_wctrans
 locale-mbwc/tst_wctype
 locale-mbwc/tst_wcwidth
+locale-mbwc/tst2_mbrtowc
 locale/show-ucs-data
 locale/tst-digits
 locale/tst-langinfo
index 05c232a..7c0e9d5 100644 (file)
@@ -15,8 +15,8 @@ TESTS := tst_iswalnum tst_iswalpha tst_iswcntrl          \
         tst_wcspbrk tst_wcsrtombs tst_wcsspn tst_wcsstr \
         tst_wcstod tst_wcstok tst_wcstombs tst_wcswidth \
         tst_wcsxfrm tst_wctob tst_wctomb tst_wctrans    \
-        tst_wctype tst_wcwidth tst_strfmon
-
+        tst_wctype tst_wcwidth tst_strfmon \
+        tst2_mbrtowc
 
 # NOTE: For now disabled tst_strfmon to avoid build failure.
 TESTS_DISABLED := tst_strfmon
diff --git a/test/locale-mbwc/tst2_mbrtowc.c b/test/locale-mbwc/tst2_mbrtowc.c
new file mode 100644 (file)
index 0000000..92e1283
--- /dev/null
@@ -0,0 +1,21 @@
+#include <wchar.h>
+#include <assert.h>
+#include <stdlib.h>
+
+/* bugs.uclibc.org/1471 : make sure output is 0  */
+static int
+do_test(void)
+{
+  wchar_t output;
+  int result;
+
+  output = L'A';               /* anything other than 0 will do... */
+  result = mbrtowc (&output, "", 1, 0);
+
+  assert (result == 0);
+  assert (output == 0);
+
+  return EXIT_SUCCESS;
+}
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"