[PATCH:libXfont 4/4] Use * precision notation instead of computing sprintf format strings

Alan Coopersmith alan.coopersmith at oracle.com
Fri Oct 21 20:56:50 PDT 2011


Allows gcc to check format strings instead of just warning about them

Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
---
 src/util/fontxlfd.c |   16 +++++-----------
 1 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/src/util/fontxlfd.c b/src/util/fontxlfd.c
index 18046e9..974128e 100644
--- a/src/util/fontxlfd.c
+++ b/src/util/fontxlfd.c
@@ -116,7 +116,6 @@ readreal(char *ptr, double *result)
 static char *
 xlfd_double_to_text(double value, char *buffer, int space_required)
 {
-    char formatbuf[40];
     register char *p1;
     int ndigits, exponent;
 
@@ -132,14 +131,12 @@ xlfd_double_to_text(double value, char *buffer, int space_required)
 	    minus = locale->negative_sign;
     }
 #endif
-    /* Compute a format to use to render the number */
-    sprintf(formatbuf, "%%.%dle", XLFD_NDIGITS);
 
     if (space_required)
 	*buffer++ = ' ';
 
     /* Render the number using printf's idea of formatting */
-    sprintf(buffer, formatbuf, value);
+    sprintf(buffer, "%.*le", XLFD_NDIGITS, value);
 
     /* Find and read the exponent value */
     for (p1 = buffer + strlen(buffer);
@@ -156,16 +153,14 @@ xlfd_double_to_text(double value, char *buffer, int space_required)
     if (exponent >= XLFD_NDIGITS || ndigits - exponent > XLFD_NDIGITS + 1)
     {
 	/* Scientific */
-	sprintf(formatbuf, "%%.%dle", ndigits - 1);
-	sprintf(buffer, formatbuf, value);
+	sprintf(buffer, "%.*le", ndigits - 1, value);
     }
     else
     {
 	/* Fixed */
 	ndigits -= exponent + 1;
 	if (ndigits < 0) ndigits = 0;
-	sprintf(formatbuf, "%%.%dlf", ndigits);
-	sprintf(buffer, formatbuf, value);
+	sprintf(buffer, "%.*lf", ndigits, value);
 	if (exponent < 0)
 	{
 	    p1 = buffer;
@@ -265,10 +260,9 @@ xlfd_round_double(double x)
 	 * If not IEEE 754:  Let printf() do it for you.
 	 */
 
-	char formatbuf[40], buffer[40];
+	char buffer[40];
 
-	sprintf(formatbuf, "%%.%dlg", XLFD_NDIGITS);
-	sprintf(buffer, formatbuf, x);
+	sprintf(buffer, "%.*lg", XLFD_NDIGITS, x);
 	return atof(buffer);
     }
 }
-- 
1.7.3.2



More information about the xorg-devel mailing list