Fix numerous bugs in formatting.
authordrepper <drepper>
Tue, 4 Nov 1997 02:15:25 +0000 (02:15 +0000)
committerdrepper <drepper>
Tue, 4 Nov 1997 02:15:25 +0000 (02:15 +0000)
stdlib/strfmon.c

index c956ae3..4f8b5b7 100644 (file)
@@ -204,7 +204,8 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
                  va_end (ap);
                  return -1;
                }
-             n_sign_posn = 5;  /* This is a else unused value.  */
+             p_sign_posn = 0;
+             n_sign_posn = 0;
              continue;
            case '!':                   /* Don't print the currency symbol.  */
              print_curr_symbol = 0;
@@ -218,6 +219,13 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
          break;
        }
 
+      /* If not specified by the format string now find the values for
+        the format specification.  */
+      if (p_sign_posn == -1)
+       p_sign_posn = *_NL_CURRENT (LC_MONETARY, P_SIGN_POSN);
+      if (n_sign_posn == -1)
+       n_sign_posn = *_NL_CURRENT (LC_MONETARY, N_SIGN_POSN);
+
       if (isdigit (*fmt))
        {
          /* Parse field width.  */
@@ -341,13 +349,7 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
            sign_char = '-';
          cs_precedes = *_NL_CURRENT (LC_MONETARY, N_CS_PRECEDES);
          sep_by_space = *_NL_CURRENT (LC_MONETARY, N_SEP_BY_SPACE);
-         /* If the '(' flag is not given use the sign position from
-            the current locale.  */
-         if (n_sign_posn == -1)
-           sign_posn = *_NL_CURRENT (LC_MONETARY, N_SIGN_POSN);
-         else
-           /* This means use parentheses.  */
-           sign_posn = 0;
+         sign_posn = n_sign_posn;
        }
       else
        {
@@ -358,13 +360,7 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
            sign_char = ' ';
          cs_precedes = *_NL_CURRENT (LC_MONETARY, P_CS_PRECEDES);
          sep_by_space = *_NL_CURRENT (LC_MONETARY, P_SEP_BY_SPACE);
-         if (n_sign_posn == -1)
-           sign_posn = *_NL_CURRENT (LC_MONETARY, P_SIGN_POSN);
-         else
-           /* Here we don't set SIGN_POSN to 0 because we don'want to
-              print <SP> instead of the braces and this is what the
-              value 5 means.  */
-           sign_posn = 5;
+         sign_posn = p_sign_posn;
        }
 
       /* Set default values for unspecified information.  */
@@ -384,9 +380,7 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
       startp = dest;           /* Remember start so we can compute length.  */
 
       if (sign_posn == 0)
-       out_char (left_paren);
-      if (sign_posn == 5)      /* This is for positive number and ( flag.  */
-       out_char (' ');
+       out_char (is_negative ? left_paren : ' ');
 
       if (cs_precedes)
        {
@@ -495,9 +489,7 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
          }
 
       if (sign_posn == 0)
-       out_char (right_paren);
-      if (sign_posn == 5)
-       out_char (' ');         /* This is for positive number and ( flag.  */
+       out_char (is_negative ? right_paren : ' ');
 
       /* Now test whether the output width is filled.  */
       if (dest - startp < width)