summaryrefslogtreecommitdiff
path: root/stdio/vfprintf.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1995-07-25 14:47:53 +0000
committerRoland McGrath <roland@gnu.org>1995-07-25 14:47:53 +0000
commit874f1b9bd817c0fa7e9fb231ec2e377c819d73a4 (patch)
tree28683317a46c9e0bea67039e80401fb82ab24e85 /stdio/vfprintf.c
parent51813e8065f8b03c09ceca85eaada73645096d26 (diff)
Tue Jul 25 09:14:53 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* stdio/vfprintf.c (vfprintf): For %s with precision spec, use memchr instead of strlen to limit search for NUL by precision.
Diffstat (limited to 'stdio/vfprintf.c')
-rw-r--r--stdio/vfprintf.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/stdio/vfprintf.c b/stdio/vfprintf.c
index 056ea32bee..1246229a63 100644
--- a/stdio/vfprintf.c
+++ b/stdio/vfprintf.c
@@ -531,13 +531,24 @@ vfprintf (s, format, ap)
len = 0;
}
}
- else
- len = strlen (str);
+ else if (specs[cnt].info.prec != -1)
+ {
+ 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;
+ }
- if (specs[cnt].info.prec != -1
- && (size_t) specs[cnt].info.prec < len)
- /* Limit the length to the precision. */
- len = specs[cnt].info.prec;
specs[cnt].info.width -= len;
if (!specs[cnt].info.left)