{
{
/* #01 */
-#ifdef NO_WAIVER
/*inp*/ { 23, "%n %% %i", 123.00 },
/*exp*/ { 1,0,1,22, "123,00 DM % 123,00 DEM" },
-#else
- /*inp*/ { 24, "%n %% %i", 123.00 },
- /*exp*/ { 1,0,1,23, "123,00 DM % 123,00 DEM " },
-#endif
},
{
/* #02 */
-#ifdef NO_WAIVER
/*inp*/ { 23, "%n %% %i", 123.00 },
/*exp*/ { 1,0,1,22, "123,00 DM % 123,00 DEM" },
-#else
- /*inp*/ { 24, "%n %% %i", 123.00 },
- /*exp*/ { 1,0,1,23, "123,00 DM % 123,00 DEM " },
-#endif
},
{
/* #03 */
{
/* #04 */
/*inp*/ { 30, "%n|%i", 1234.561 },
-#ifdef NO_WAIVER
/*exp*/ { 1,0,1,24, "1.234,56 DM|1.234,56 DEM" },
-#else
- /*exp*/ { 1,0,1,25, "1.234,56 DM|1.234,56 DEM " },
-#endif
},
{
/* #05 */
/*inp*/ { 32, "%n|%i", -1234.561 },
-#ifdef NO_WAIVER
/*exp*/ { 1,0,1,26, "-1.234,56 DM|-1.234,56 DEM"},
-#else
- /*exp*/ { 1,0,1,27, "-1.234,56 DM|-1.234,56 DEM "},
-#endif
},
{
/* #06 */
/*inp*/ { 32, "%12n|%12i", 1234.561 },
-#ifdef NO_WAIVER
/*exp*/ { 1,0,1,25, " 1.234,56 DM|1.234,56 DEM"},
-#else
- /*exp*/ { 1,0,1,26, " 1.234,56 DM|1.234,56 DEM "},
-#endif
},
{
/* #07 */
/*inp*/ { 32, "%12n|%12i", -1234.561 },
-#ifdef NO_WAIVER
/*exp*/ { 1,0,1,26, "-1.234,56 DM|-1.234,56 DEM"},
-#else
- /*exp*/ { 1,0,1,27, "-1.234,56 DM|-1.234,56 DEM "},
-#endif
},
{
/* #08 */
/*inp*/ { 32, "%#5n|%#5i", 1234.561 },
-#ifdef NO_WAIVER
/*exp*/ { 1,0,1,28, " 1.234,56 DM| 1.234,56 DEM"},
-#else
- /*exp*/ { 1,0,1,29, " 1.234,56 DM| 1.234,56 DEM "},
-#endif
},
{
/* #09 */
/*inp*/ { 32, "%#5n|%#5i", -1234.561 },
-#ifdef NO_WAIVER
/*exp*/ { 1,0,1,28, "- 1.234,56 DM|- 1.234,56 DEM"},
-#else
- /*exp*/ { 1,0,1,29, "- 1.234,56 DM|- 1.234,56 DEM "},
-#endif
},
{
/* #10 */
/*inp*/ { 32, "%=*#5n|%=*#5i", 1234.561 },
-#ifdef NO_WAIVER
/*exp*/ { 1,0,1,28, " *1.234,56 DM| *1.234,56 DEM"},
-#else
- /*exp*/ { 1,0,1,29, " *1.234,56 DM| *1.234,56 DEM "},
-#endif
},
{
/* #11 */
/*inp*/ { 32, "%=0#5n|%=0#5i", -1234.561 },
-#ifdef NO_WAIVER
/*exp*/ { 1,0,1,28, "-01.234,56 DM|-01.234,56 DEM"},
-#else
- /*exp*/ { 1,0,1,29, "-01.234,56 DM|-01.234,56 DEM "},
-#endif
},
{
/* #12 */
/*inp*/ { 32, "%^#5n|%^#5i", -1234.561 },
-#ifdef NO_WAIVER
/*exp*/ { 1,0,1,26, "- 1234,56 DM|- 1234,56 DEM"},
-#else
- /*exp*/ { 1,0,1,27, "- 1234,56 DM|- 1234,56 DEM "},
-#endif
},
{
/* #13 */
/*inp*/ { 32, "%#5.0n|%#5.0i", 1234.444 },
-#ifdef NO_WAIVER
/*exp*/ { 1,0,1,22, " 1.234 DM| 1.234 DEM" },
-#else
- /*exp*/ { 1,0,1,23, " 1.234 DM| 1.234 DEM " },
-#endif
},
{
/* #14 */
/*inp*/ { 32, "%#5.0n|%#5.4i", -1234.555 },
-#ifdef NO_WAIVER
/*exp*/ { 1,0,1,27, "- 1.235 DM|- 1.234,5550 DEM"},
-#else
- /*exp*/ { 1,0,1,28, "- 1.235 DM|- 1.234,5550 DEM "},
-#endif
},
{
/* #15 */
de_DE.ISO-8859-1 %(n 1234.56 1.234,56 DM
de_DE.ISO-8859-1 %(n -1234.56 (1.234,56 DM)
de_DE.ISO-8859-1 %^n 1234.56 1234,56 DM
-de_DE.ISO-8859-1 %i 1.23 1,23 DEM
-de_DE.ISO-8859-1 %i -1.23 -1,23 DEM
-de_DE.ISO-8859-1 %i 1234.56 1.234,56 DEM
-de_DE.ISO-8859-1 %^i 1234.56 1234,56 DEM
-de_DE.ISO-8859-1 %+i 1234.56 1.234,56 DEM
-de_DE.ISO-8859-1 %+i -1234.56 -1.234,56 DEM
-de_DE.ISO-8859-1 %(i 1234.56 1.234,56 DEM
-de_DE.ISO-8859-1 %(i -1234.56 (1.234,56 DEM )
-de_DE.ISO-8859-1 %^i 1234.56 1234,56 DEM
+de_DE.ISO-8859-1 %i 1.23 1,23 DEM
+de_DE.ISO-8859-1 %i -1.23 -1,23 DEM
+de_DE.ISO-8859-1 %i 1234.56 1.234,56 DEM
+de_DE.ISO-8859-1 %^i 1234.56 1234,56 DEM
+de_DE.ISO-8859-1 %+i 1234.56 1.234,56 DEM
+de_DE.ISO-8859-1 %+i -1234.56 -1.234,56 DEM
+de_DE.ISO-8859-1 %(i 1234.56 1.234,56 DEM
+de_DE.ISO-8859-1 %(i -1234.56 (1.234,56 DEM)
+de_DE.ISO-8859-1 %^i 1234.56 1234,56 DEM
de_DE.ISO-8859-1 %#5n 123.45 123,45 DM
de_DE.ISO-8859-1 %#5n -123.45 - 123,45 DM
de_DE.ISO-8859-1 %#5n 3456.781 3.456,78 DM
out_char (*_s++); \
} while (0)
+#define out_nstring(String, N) \
+ do { \
+ int _n = (N); \
+ const char *_s = (String); \
+ while (_n-- > 0) \
+ out_char (*_s++); \
+ } while (0)
+
#define to_digit(Ch) ((Ch) - '0')
const char *other_sign_string;
int done;
const char *currency_symbol;
+ size_t currency_symbol_len;
int width;
char *startp;
const void *ptr;
+ char space_char;
/* Process all character which do not introduce a format
specification. */
{
case 'i': /* Use international currency symbol. */
currency_symbol = _NL_CURRENT (LC_MONETARY, INT_CURR_SYMBOL);
+ currency_symbol_len = 3;
+ space_char = currency_symbol[3];
if (right_prec == -1)
{
if (*_NL_CURRENT (LC_MONETARY, INT_FRAC_DIGITS) == CHAR_MAX)
break;
case 'n': /* Use national currency symbol. */
currency_symbol = _NL_CURRENT (LC_MONETARY, CURRENCY_SYMBOL);
+ currency_symbol_len = strlen (currency_symbol);
+ space_char = ' ';
if (right_prec == -1)
{
if (*_NL_CURRENT (LC_MONETARY, FRAC_DIGITS) == CHAR_MAX)
preceding the value */
if (cs_precedes)
{
- left_bytes += strlen (currency_symbol);
+ left_bytes += currency_symbol_len;
if (sep_by_space != 0)
++left_bytes;
}
if (other_cs_precedes)
{
- other_left_bytes += strlen (currency_symbol);
+ other_left_bytes += currency_symbol_len;
if (other_sep_by_space != 0)
++other_left_bytes;
}
if (sign_posn == 4)
{
if (sep_by_space == 2)
- out_char (' ');
+ out_char (space_char);
out_string (sign_string);
if (sep_by_space == 1)
/* POSIX.2 and SUS are not clear on this case, but C99
}
else
if (sep_by_space == 1)
- out_char (' ');
+ out_char (space_char);
}
}
else
|| (sign_posn == 2 && sep_by_space == 1)
|| (sign_posn == 1 && sep_by_space == 1)
|| (sign_posn == 0 && sep_by_space == 1))
- out_char (' ');
- out_string (currency_symbol);
+ out_char (space_char);
+ out_nstring (currency_symbol, currency_symbol_len);
if (sign_posn == 4)
{
if (sep_by_space == 2)