(vstrtold): Renamed from vstrtod.
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 12 Jul 2004 06:36:55 +0000 (06:36 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 12 Jul 2004 06:36:55 +0000 (06:36 +0000)
Now returns long double.  All uses changed.
(print_direc): Use "L" length modifier when printing floating point
numbers, since we're now printing long double.

src/printf.c

index 7d0f68b1008e62ae8258d2e643a3b15e810a681a..6a3a37a58bef2b312861a9cf6b8703cede698cc4 100644 (file)
@@ -183,9 +183,9 @@ FUNC_NAME (char const *s)                                            \
   return val;                                                           \
 }                                                                       \
 
-STRTOX (intmax_t,  vstrtoimax, (strtoimax (s, &end, 0)))
-STRTOX (uintmax_t, vstrtoumax, (strtoumax (s, &end, 0)))
-STRTOX (double,    vstrtod,    (c_strtod (s, &end)))
+STRTOX (intmax_t,    vstrtoimax, (strtoimax (s, &end, 0)))
+STRTOX (uintmax_t,   vstrtoumax, (strtoumax (s, &end, 0)))
+STRTOX (long double, vstrtold,   (c_strtold (s, &end)))
 
 /* Output a single-character \ escape.  */
 
@@ -334,22 +334,31 @@ print_direc (const char *start, size_t length, char conversion,
      integer length modifier.  */
   {
     char *q;
+    char const *length_modifier;
     size_t length_modifier_len;
 
     switch (conversion)
       {
       case 'd': case 'i': case 'o': case 'u': case 'x': case 'X':
+       length_modifier = PRIdMAX;
        length_modifier_len = sizeof PRIdMAX - 2;
        break;
 
+      case 'a': case 'e': case 'f': case 'g':
+      case 'A': case 'E': case 'F': case 'G':
+       length_modifier = "L";
+       length_modifier_len = 1;
+       break;
+
       default:
+       length_modifier = start;  /* Any valid pointer will do.  */
        length_modifier_len = 0;
        break;
       }
 
     p = xmalloc (length + length_modifier_len + 2);
     q = mempcpy (p, start, length);
-    q = mempcpy (q, PRIdMAX, length_modifier_len);
+    q = mempcpy (q, length_modifier, length_modifier_len);
     *q++ = conversion;
     *q = '\0';
   }
@@ -409,7 +418,7 @@ print_direc (const char *start, size_t length, char conversion,
     case 'g':
     case 'G':
       {
-       double arg = vstrtod (argument);
+       long double arg = vstrtold (argument);
        if (!have_field_width)
          {
            if (!have_precision)