aboutsummaryrefslogtreecommitdiff
path: root/stdlib/strfmon.c
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/strfmon.c')
-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)