mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-05 12:40:55 +08:00
locale: Allow "" int_curr_Symbol (bug 22294)
The builtin POSIX locale has "" as the international currency symbol, but a non-builtin locale may not have such a blank int_curr_symbol. Therefore to support non-builtin locales with similar "" int_curr_symbol we adjust the LC_MONETARY parser to allow the normal 4-character int_curr_symbol *and* the empty "" no symbol. Anything else remains invalid. Tested by building all the locales. Tested also with a custom C.UTF-8 locale with "" for int_curr_symbol. Signed-off-by: Carlos O'Donell <carlos@redhat.com>
This commit is contained in:
parent
f16491eb8e
commit
a3e23a2c1d
@ -1,3 +1,9 @@
|
|||||||
|
2017-10-13 Carlos O'Donell <carlos@redhat.com>
|
||||||
|
|
||||||
|
[BZ #22294]
|
||||||
|
* locale/programs/ld-monetary.c (monetary_finish): Allow ""
|
||||||
|
int_curr_symbol.
|
||||||
|
|
||||||
2017-10-13 Carlos O'Donell <carlos@redhat.com>
|
2017-10-13 Carlos O'Donell <carlos@redhat.com>
|
||||||
|
|
||||||
[BZ #22292]
|
[BZ #22292]
|
||||||
|
@ -216,14 +216,20 @@ No definition for %s category found"), "LC_MONETARY");
|
|||||||
/* The international currency symbol must come from ISO 4217. */
|
/* The international currency symbol must come from ISO 4217. */
|
||||||
if (monetary->int_curr_symbol != NULL)
|
if (monetary->int_curr_symbol != NULL)
|
||||||
{
|
{
|
||||||
if (strlen (monetary->int_curr_symbol) != 4)
|
/* POSIX says this should be a 3-character symbol from ISO 4217
|
||||||
|
along with a 4th character that is a divider, but the POSIX
|
||||||
|
locale is documented as having a special case of "", and we
|
||||||
|
support that also, so allow other locales to be created with
|
||||||
|
a blank int_curr_symbol. */
|
||||||
|
int ics_len = strlen (monetary->int_curr_symbol);
|
||||||
|
if (ics_len != 4 && ics_len != 0)
|
||||||
{
|
{
|
||||||
if (! nothing)
|
if (! nothing)
|
||||||
record_error (0, 0, _("\
|
record_error (0, 0, _("\
|
||||||
%s: value of field `int_curr_symbol' has wrong length"),
|
%s: value of field `int_curr_symbol' has wrong length"),
|
||||||
"LC_MONETARY");
|
"LC_MONETARY");
|
||||||
}
|
}
|
||||||
else
|
else if (ics_len == 4)
|
||||||
{ /* Check the first three characters against ISO 4217 */
|
{ /* Check the first three characters against ISO 4217 */
|
||||||
char symbol[4];
|
char symbol[4];
|
||||||
strncpy (symbol, monetary->int_curr_symbol, 3);
|
strncpy (symbol, monetary->int_curr_symbol, 3);
|
||||||
|
Loading…
Reference in New Issue
Block a user