diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | stdio-common/Makefile | 4 | ||||
-rw-r--r-- | stdio-common/bug14.c | 28 |
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; +} |