aboutsummaryrefslogtreecommitdiff
path: root/stdio-common
diff options
context:
space:
mode:
Diffstat (limited to 'stdio-common')
-rw-r--r--stdio-common/vfscanf.c26
1 files changed, 9 insertions, 17 deletions
diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c
index 29d96e48a4..6312af719e 100644
--- a/stdio-common/vfscanf.c
+++ b/stdio-common/vfscanf.c
@@ -755,40 +755,35 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
{
/* We have to convert the multibyte input sequence to wide
characters. */
- char buf[MB_LEN_MAX];
+ char buf[0];
mbstate_t cstate;
memset (&cstate, '\0', sizeof (cstate));
do
{
- size_t cnt;
-
/* This is what we present the mbrtowc function first. */
buf[0] = c;
- cnt = 1;
while (1)
{
size_t n;
n = __mbrtowc (!(flags & SUPPRESS) ? wstr : NULL,
- buf, cnt, &cstate);
+ buf, 1, &cstate);
if (n == (size_t) -2)
{
/* Possibly correct character, just not enough
input. */
- assert (cnt < MB_CUR_MAX);
-
if (inchar () == EOF)
encode_error ();
- buf[cnt++] = c;
+ buf[0] = c;
continue;
}
- if (n != cnt)
+ if (n != 1)
encode_error ();
/* We have a match. */
@@ -1063,36 +1058,33 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
}
#else
{
- char buf[MB_LEN_MAX];
- size_t cnt;
+ char buf[0];
buf[0] = c;
- cnt = 1;
while (1)
{
size_t n;
n = __mbrtowc (!(flags & SUPPRESS) ? wstr : NULL,
- buf, cnt, &cstate);
+ buf, 1, &cstate);
if (n == (size_t) -2)
{
/* Possibly correct character, just not enough
input. */
- assert (cnt < MB_CUR_MAX);
-
if (inchar () == EOF)
encode_error ();
- buf[cnt++] = c;
+ buf[0] = c;
continue;
}
- if (n != cnt)
+ if (n != 1)
encode_error ();
/* We have a match. */
+ ++wstr;
break;
}