From 7752137a6a9d9a042d2c2f00e245b920e41737bc Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Fri, 25 Aug 1995 19:23:32 +0000 Subject: Fri Aug 25 12:12:42 1995 Roland McGrath * sysdeps/mach/hurd/mmap.c: Fix inverted test of MAP_FIXED. * stdio/vfscanf.c (number): Allow field width to inhibit first digit after base detection. * stdio/vfprintf.c (vfprintf: %s): Never search past the limit specified by the precision. * grp/grpread.c (__grpscan): New function. * grp/grp.h (__grpscan): Declare it. * grp/getgrgid.c: Use __grpscan. * grp/getgrnam.c: Likewise. * pwd/pwdread.c (__pwdscan): New function. * pwd/pwd.h (__pwdscan): Declare it. * pwd/getpwnam.c: Use __pwdscan. * pwd/getpwuid.c: Likewise. Thu Aug 24 16:29:40 1995 Roland McGrath * sysdeps/mach/hurd/mmap.c: Treat (FLAGS & MAP_TYPE) == 0 like MAP_FILE. * hurd/thread-cancel.c: Return EINTR when called on self. * sysdeps/i386/elf/start.S (data_start): Define as weak alias for __data_start. --- stdio/vfprintf.c | 13 ++++--------- stdio/vfscanf.c | 7 ++++--- 2 files changed, 8 insertions(+), 12 deletions(-) (limited to 'stdio') diff --git a/stdio/vfprintf.c b/stdio/vfprintf.c index 1246229..06aa0a0 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 6eacc2b..a778346 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. */ -- cgit v1.1