summaryrefslogtreecommitdiff
path: root/lib/libc/stdlib/strfmon.c
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2011-08-14 09:07:15 +0000
committerchristos <christos@NetBSD.org>2011-08-14 09:07:15 +0000
commitd406b01cfbcb076dcaa93665c264bdba988df7a1 (patch)
tree8c7adcc62c38510c3bf66a39b254fbef8429b613 /lib/libc/stdlib/strfmon.c
parentf3b13d3abf60b5f0a02b30f933432197571a5fda (diff)
no need for the snprintf/asprintf dance; use fixed width formats.
Diffstat (limited to 'lib/libc/stdlib/strfmon.c')
-rw-r--r--lib/libc/stdlib/strfmon.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/lib/libc/stdlib/strfmon.c b/lib/libc/stdlib/strfmon.c
index d53ed7f13e5..74196aebb7b 100644
--- a/lib/libc/stdlib/strfmon.c
+++ b/lib/libc/stdlib/strfmon.c
@@ -1,4 +1,4 @@
-/* $NetBSD: strfmon.c,v 1.7 2009/01/30 23:46:03 lukem Exp $ */
+/* $NetBSD: strfmon.c,v 1.8 2011/08/14 09:07:15 christos Exp $ */
/*-
* Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
@@ -32,7 +32,7 @@
#if 0
__FBSDID("$FreeBSD: src/lib/libc/stdlib/strfmon.c,v 1.14 2003/03/20 08:18:55 ache Exp $");
#else
-__RCSID("$NetBSD: strfmon.c,v 1.7 2009/01/30 23:46:03 lukem Exp $");
+__RCSID("$NetBSD: strfmon.c,v 1.8 2011/08/14 09:07:15 christos Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@@ -505,7 +505,6 @@ __format_grouped_double(double value, int *flags,
char *rslt;
char *avalue;
int avalue_size;
- char fmt[32];
size_t bufsize;
char *bufend;
@@ -546,14 +545,13 @@ __format_grouped_double(double value, int *flags,
left_prec += get_groups(left_prec, grouping);
/* convert to string */
- snprintf(fmt, sizeof(fmt), "%%%d.%df", left_prec + right_prec + 1,
- right_prec);
- avalue_size = asprintf(&avalue, fmt, value);
+ avalue_size = asprintf(&avalue, "%*.*f", left_prec + right_prec + 1,
+ right_prec, value);
if (avalue_size < 0)
return (NULL);
/* make sure that we've enough space for result string */
- bufsize = strlen(avalue)*2+1;
+ bufsize = avalue_size * 2 + 1;
rslt = malloc(bufsize);
if (rslt == NULL) {
free(avalue);
@@ -577,6 +575,7 @@ __format_grouped_double(double value, int *flags,
avalue_size -= (right_prec + 1);
}
+ /* XXX: Why not use %' instead? */
if ((*flags & NEED_GROUPING) &&
thousands_sep != '\0' && /* XXX: need investigation */
*grouping != CHAR_MAX &&