about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--stdio-common/Makefile4
-rw-r--r--stdio-common/bug14.c28
3 files changed, 33 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 07bd5ee4dd..e9c8c51301 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2003-01-15  Ulrich Drepper  <drepper@redhat.com>
 
+	* stdio-common/Makefile (tests): Add bug14.
+	* stdio-common/bug14.c: New file.
+
 	* stdio-common/vfscanf.c: When recognizing multibyte characters in
 	string reset the byte counter after mbrtowc reported it is not a
 	partial character.  Reported by Al Viro <aviro@redhat.com>.
diff --git a/stdio-common/Makefile b/stdio-common/Makefile
index ea6da1d0b1..78f742e531 100644
--- a/stdio-common/Makefile
+++ b/stdio-common/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+# Copyright (C) 1991-2002, 2003 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 
 # The GNU C Library is free software; you can redistribute it and/or
@@ -54,7 +54,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
 	 scanf1 scanf2 scanf3 scanf4 scanf5 scanf7 scanf8 scanf9 scanf10 \
 	 scanf11 scanf12 tst-tmpnam tst-cookie tst-obprintf tst-sscanf \
 	 tst-swprintf tst-fseek tst-fmemopen test-vfprintf tst-gets \
-	 tst-perror tst-sprintf tst-rndseek tst-fdopen tst-fphex
+	 tst-perror tst-sprintf tst-rndseek tst-fdopen tst-fphex bug14
 
 test-srcs = tst-unbputc tst-printf
 
diff --git a/stdio-common/bug14.c b/stdio-common/bug14.c
new file mode 100644
index 0000000000..31ef754358
--- /dev/null
+++ b/stdio-common/bug14.c
@@ -0,0 +1,28 @@
+/* Test case by Al Viro <aviro@redhat.com>.  */
+#include <locale.h>
+#include <wchar.h>
+#include <stdio.h>
+
+/* MB_CUR_MAX multibyte ones (6 UTF+0080, in this case) */
+static const char string[] = "\
+\xc2\x80\xc2\x80\xc2\x80\xc2\x80\xc2\x80\xc2\x80";
+
+int
+main (void)
+{
+  if (setlocale (LC_ALL, "de_DE.utf8") == NULL)
+    {
+      puts ("cannot set locale");
+      exit (1);
+    }
+
+  wchar_t s[7];
+  int n = sscanf (string, "%l[\x80\xc2]", s);
+  if (n != 1)
+    {
+      printf ("return values %d != 1\n", n);
+      exit (1);
+    }
+
+  return 0;
+}