Message ID | 291099144.1094665.1505817664806@poczta.nazwa.pl |
---|---|
State | New |
Headers | show |
Series | Month names in alternative grammatical case | expand |
On Tue, Sep 19, 2017 at 6:41 AM, Rafal Luzynski <digitalfreak@lingonborough.com> wrote: > There were several problems with checking the array size in the past, > for example BZ#356, caused by incorrectly assuming that every locale > token represents one element. In fact, if a token represented > a subarray, for example an array of month names or characters category > and it appeared at the end of the array the compiler assumed that > the array ends just after the first element of the subarray. > Workarounds used in the past was to skip some categories while testing, > for example LC_CTYPE. Now when we are about to add alternative month > names to LC_TIME (BZ#10871) this will fail again. > ... > #define DEFINE_CATEGORY(category, category_name, items, a) \ > -static const enum value_type _nl_value_type_##category[] = { NO_PAREN items }; > +static const enum value_type _nl_value_type_##category \ > + [_NL_ITEM_INDEX (_NL_NUM_##category)] = { NO_PAREN items }; > #define DEFINE_ELEMENT(element, element_name, optstd, type, rest...) \ > [_NL_ITEM_INDEX (element)] = type, > #include "categories.def" Please add a short version of your commit-message explanation of the change as a comment right above "#define DEFINE_CATEGORY". Something like /* The size of the array must be specified explicitly because some of the 'items' may be subarrays, which will cause the compiler to deduce an incorrect size from the initializer. */ OK with that change; as this is independent of the rest of the patches, please go ahead and push it immediately, without the rest of them. zw
27.10.2017 17:00 Zack Weinberg <zackw@panix.com> wrote: > > [...] > OK with that change; as this is independent of the rest of the > patches, please go ahead and push it immediately, without the rest of > them. Thank you, Zack. I'm going to apply your suggestions and push it now. Regards, Rafal
diff --git a/ChangeLog b/ChangeLog index 25b05f2..3b8e6c5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-09-19 Rafal Luzynski <digitalfreak@lingonborough.com> + + * locale/loadlocale.c: Correct size of + _nl_value_type_LC_<category> arrays. + 2017-09-19 Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com> * sysdeps/powerpc/powerpc64/power8/memset.S: Avoid misaligned stores. diff --git a/locale/loadlocale.c b/locale/loadlocale.c index 2bdb39b..cdc3dd4 100644 --- a/locale/loadlocale.c +++ b/locale/loadlocale.c @@ -45,7 +45,8 @@ static const size_t _nl_category_num_items[] = #define NO_PAREN(arg, rest...) arg, ##rest #define DEFINE_CATEGORY(category, category_name, items, a) \ -static const enum value_type _nl_value_type_##category[] = { NO_PAREN items }; +static const enum value_type _nl_value_type_##category \ + [_NL_ITEM_INDEX (_NL_NUM_##category)] = { NO_PAREN items }; #define DEFINE_ELEMENT(element, element_name, optstd, type, rest...) \ [_NL_ITEM_INDEX (element)] = type, #include "categories.def"