summary refs log tree commit diff
path: root/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/strfmon.c34
1 files changed, 13 insertions, 21 deletions
diff --git a/stdlib/strfmon.c b/stdlib/strfmon.c
index c956ae3040..4f8b5b70af 100644
--- a/stdlib/strfmon.c
+++ b/stdlib/strfmon.c
@@ -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)