diff options
Diffstat (limited to 'stdio')
-rw-r--r-- | stdio/vfprintf.c | 13 | ||||
-rw-r--r-- | stdio/vfscanf.c | 7 |
2 files changed, 8 insertions, 12 deletions
diff --git a/stdio/vfprintf.c b/stdio/vfprintf.c index 1246229a63..06aa0a0e7d 100644 --- a/stdio/vfprintf.c +++ b/stdio/vfprintf.c @@ -533,21 +533,16 @@ vfprintf (s, format, ap) } else if (specs[cnt].info.prec != -1) { + /* Search for the end of the string, but don't search + past the length specified by the precision. */ const char *end = memchr (str, '\0', specs[cnt].info.prec); if (end) len = end - str; else - len = strlen (str); - } - else - { - len = strlen (str); - - if (specs[cnt].info.prec != -1 - && (size_t) specs[cnt].info.prec < len) - /* Limit the length to the precision. */ len = specs[cnt].info.prec; } + else + len = strlen (str); specs[cnt].info.width -= len; diff --git a/stdio/vfscanf.c b/stdio/vfscanf.c index 6eacc2b309..a778346287 100644 --- a/stdio/vfscanf.c +++ b/stdio/vfscanf.c @@ -422,7 +422,7 @@ DEFUN(__vfscanf, (s, format, arg), base = 10; /* Read the number into WORK. */ - do + while (width != 0 && c != EOF) { if (base == 16 ? !isxdigit(c) : (!isdigit(c) || c - '0' >= base)) @@ -430,11 +430,12 @@ DEFUN(__vfscanf, (s, format, arg), *w++ = c; if (width > 0) --width; - } while (inchar() != EOF && width != 0); + (void) inchar (); + } if (w == work || (w - work == 1 && (work[0] == '+' || work[0] == '-'))) - /* There was on number. */ + /* There was no number. */ conv_error(); /* Convert the number. */ |