Skip to content

Commit 6125a5e

Browse files
committed
locales: Add LC_NAME capabilities
LC_NAME is a GNU extension that Perl hadn't been aware of. The consequences were that it couldn't be set or queried in Perl (except by using LC_ALL to set everything). There are other GNU extensions that Perl has long known about; this was the only missing one. The values associated with this category are retrievable by the glibc call nl_langinfo(3) in XS code. The standard-specified items are retrievable from pure Perl via I18N::Langinfo, but it doesn't know only about any of the non-standard ones, including the ones for this category.
1 parent 4428256 commit 6125a5e

File tree

7 files changed

+35
-7
lines changed

7 files changed

+35
-7
lines changed

ext/POSIX/Makefile.PL

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ my @names =
5151
EUSERS EWOULDBLOCK EXDEV FILENAME_MAX F_OK HUPCL ICANON ICRNL IEXTEN
5252
IGNBRK IGNCR IGNPAR INLCR INPCK INT_MAX INT_MIN ISIG ISTRIP IXOFF IXON
5353
LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION LC_MEASUREMENT
54-
LC_MESSAGES LC_MONETARY LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME
54+
LC_MESSAGES LC_MONETARY LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_NAME
5555
LINK_MAX LONG_MAX LONG_MIN L_ctermid L_cuserid MAX_CANON
5656
MAX_INPUT MB_LEN_MAX MSG_CTRUNC MSG_DONTROUTE MSG_EOR MSG_OOB MSG_PEEK
5757
MSG_TRUNC MSG_WAITALL NAME_MAX NCCS NGROUPS_MAX NOFLSH OPEN_MAX OPOST

ext/POSIX/lib/POSIX.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ my %default_export_tags = ( # cf. exports policy below
307307

308308
locale_h => [qw(LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES
309309
LC_MONETARY LC_NUMERIC LC_TIME LC_IDENTIFICATION
310-
LC_MEASUREMENT LC_PAPER LC_TELEPHONE LC_ADDRESS
310+
LC_MEASUREMENT LC_PAPER LC_TELEPHONE LC_ADDRESS LC_NAME
311311
LC_SYNTAX LC_TOD NULL
312312
localeconv setlocale)],
313313

ext/POSIX/t/export.t

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ my %expect = (
4848
INT_MAX INT_MIN ISIG ISTRIP IXOFF IXON
4949
LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION
5050
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NUMERIC LC_PAPER
51-
LC_TELEPHONE LC_TIME LC_SYNTAX LC_TOD LDBL_DIG
51+
LC_TELEPHONE LC_TIME LC_NAME LC_SYNTAX LC_TOD LDBL_DIG
5252
LDBL_EPSILON LDBL_MANT_DIG LDBL_MAX LDBL_MAX_10_EXP
5353
LDBL_MAX_EXP LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP LINK_MAX
5454
LONG_MAX LONG_MIN L_ctermid L_cuserid MAX_CANON

intrpvar.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,7 @@ PERLVARI(I, cur_locale_obj, locale_t, NULL)
745745

746746
/* This is the most number of categories we've encountered so far on any
747747
* platform, doesn't include LC_ALL */
748-
PERLVARA(I, curlocales, 11, const char *)
748+
PERLVARA(I, curlocales, 12, const char *)
749749

750750
#endif
751751
#ifdef USE_PL_CUR_LC_ALL

locale.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,9 @@ STATIC const int categories[] = {
283283
# ifdef USE_LOCALE_TELEPHONE
284284
LC_TELEPHONE,
285285
# endif
286+
# ifdef USE_LOCALE_NAME
287+
LC_NAME,
288+
# endif
286289
# ifdef USE_LOCALE_SYNTAX
287290
LC_SYNTAX,
288291
# endif
@@ -335,6 +338,9 @@ STATIC const char * const category_names[] = {
335338
# ifdef USE_LOCALE_TELEPHONE
336339
"LC_TELEPHONE",
337340
# endif
341+
# ifdef USE_LOCALE_NAME
342+
"LC_NAME",
343+
# endif
338344
# ifdef USE_LOCALE_SYNTAX
339345
"LC_SYNTAX",
340346
# endif
@@ -386,6 +392,9 @@ STATIC void (*update_functions[]) (pTHX_ const char *) = {
386392
# ifdef USE_LOCALE_TELEPHONE
387393
NULL,
388394
# endif
395+
# ifdef USE_LOCALE_NAME
396+
NULL,
397+
# endif
389398
# ifdef USE_LOCALE_SYNTAX
390399
NULL,
391400
# endif
@@ -794,6 +803,9 @@ STATIC const int category_masks[] = {
794803
# ifdef USE_LOCALE_TELEPHONE
795804
LC_TELEPHONE_MASK,
796805
# endif
806+
# ifdef USE_LOCALE_NAME
807+
LC_NAME_MASK,
808+
# endif
797809
# ifdef USE_LOCALE_SYNTAX
798810
LC_SYNTAX_MASK,
799811
# endif
@@ -4805,6 +4817,13 @@ Perl_init_i18nl10n(pTHX_ int printwarn)
48054817
assert(category_masks[LC_TELEPHONE_INDEX_] == LC_TELEPHONE_MASK);
48064818
# endif
48074819
# endif
4820+
# ifdef USE_LOCALE_NAME
4821+
assert(categories[LC_NAME_INDEX_] == LC_NAME);
4822+
assert(strEQ(category_names[LC_NAME_INDEX_], "LC_NAME"));
4823+
# ifdef USE_POSIX_2008_LOCALE
4824+
assert(category_masks[LC_NAME_INDEX_] == LC_NAME_MASK);
4825+
# endif
4826+
# endif
48084827
# ifdef USE_LOCALE_SYNTAX
48094828
assert(categories[LC_SYNTAX_INDEX_] == LC_SYNTAX);
48104829
assert(strEQ(category_names[LC_SYNTAX_INDEX_], "LC_SYNTAX"));

perl.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1129,6 +1129,9 @@ violations are fatal.
11291129
# if !defined(NO_LOCALE_TELEPHONE) && defined(LC_TELEPHONE)
11301130
# define USE_LOCALE_TELEPHONE
11311131
# endif
1132+
# if !defined(NO_LOCALE_NAME) && defined(LC_NAME)
1133+
# define USE_LOCALE_NAME
1134+
# endif
11321135
# if !defined(NO_LOCALE_SYNTAX) && defined(LC_SYNTAX)
11331136
# define USE_LOCALE_SYNTAX
11341137
# endif
@@ -1203,11 +1206,17 @@ violations are fatal.
12031206
# else
12041207
# define PERL_DUMMY_TELEPHONE_ PERL_DUMMY_PAPER_
12051208
# endif
1209+
# ifdef USE_LOCALE_NAME
1210+
# define LC_NAME_INDEX_ PERL_DUMMY_TELEPHONE_ + 1
1211+
# define PERL_DUMMY_NAME_ LC_NAME_INDEX_
1212+
# else
1213+
# define PERL_DUMMY_NAME_ PERL_DUMMY_TELEPHONE_
1214+
# endif
12061215
# ifdef USE_LOCALE_SYNTAX
1207-
# define LC_SYNTAX_INDEX_ PERL_DUMMY_TELEPHONE_ + 1
1216+
# define LC_SYNTAX_INDEX_ PERL_DUMMY_NAME + 1
12081217
# define PERL_DUMMY_SYNTAX_ LC_SYNTAX_INDEX_
12091218
# else
1210-
# define PERL_DUMMY_SYNTAX_ PERL_DUMMY_TELEPHONE_
1219+
# define PERL_DUMMY_SYNTAX_ PERL_DUMMY_NAME_
12111220
# endif
12121221
# ifdef USE_LOCALE_TOD
12131222
# define LC_TOD_INDEX_ PERL_DUMMY_SYNTAX_ + 1

t/loc_tools.pl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
my @known_categories = ( qw(LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY
2727
LC_NUMERIC LC_TIME LC_ADDRESS LC_IDENTIFICATION
2828
LC_MEASUREMENT LC_PAPER LC_TELEPHONE LC_SYNTAX
29-
LC_TOD));
29+
LC_TOD LC_NAME));
3030
my @platform_categories;
3131

3232
sub category_excluded($) {

0 commit comments

Comments
 (0)