Module Name:    src
Committed By:   christos
Date:           Sun Aug 14 09:07:15 UTC 2011

Modified Files:
        src/lib/libc/stdlib: strfmon.c

Log Message:
no need for the snprintf/asprintf dance; use fixed width formats.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/lib/libc/stdlib/strfmon.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/stdlib/strfmon.c
diff -u src/lib/libc/stdlib/strfmon.c:1.7 src/lib/libc/stdlib/strfmon.c:1.8
--- src/lib/libc/stdlib/strfmon.c:1.7	Fri Jan 30 18:46:03 2009
+++ src/lib/libc/stdlib/strfmon.c	Sun Aug 14 05:07:15 2011
@@ -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 <phan...@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 @@
 	char		*rslt;
 	char		*avalue;
 	int		avalue_size;
-	char		fmt[32];
 
 	size_t		bufsize;
 	char		*bufend;
@@ -546,14 +545,13 @@
 		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 @@
 		avalue_size -= (right_prec + 1);
 	}
 
+        /* XXX: Why not use %' instead? */
 	if ((*flags & NEED_GROUPING) &&
 	    thousands_sep != '\0' &&	/* XXX: need investigation */
 	    *grouping != CHAR_MAX &&

Reply via email to