Re: [PATCH 1/3] t-ctype: allow NUL anywhere in the specification string
- From
René Scharfe <l.s.r@web.de>
- Date
- Feb 25, 2024, 18:28 UTC
- Message-ID
- <5dea0535-4b21-483a-a10a-bfa8e9e85650@web.de>
- In-Reply-To
- <CAPig+cTvs7Ckg=k1T+N3N=yT840xM2DYf3LV9NZhii8+c1nkbw@mail.gmail.com>
Am 25.02.24 um 19:05 schrieb Eric Sunshine:
Show 20 quoted lines
> On Sun, Feb 25, 2024 at 6:27 AM René Scharfe <l.s.r@web.de> wrote: >> Replace the custom function is_in() for looking up a character in the >> specification string with memchr(3) and sizeof. This is shorter, >> simpler and allows NUL anywhere in the string, which may come in handy >> if we ever want to support more character classes that contain it. >> >> Getting the string size using sizeof only works in a macro and with a >> string constant, but that's exactly what we have and I don't see it >> changing anytime soon. >> >> Signed-off-by: René Scharfe <l.s.r@web.de> >> --- >> diff --git a/t/unit-tests/t-ctype.c b/t/unit-tests/t-ctype.c >> @@ -1,23 +1,11 @@ >> /* Macro to test a character type */ >> #define TEST_CTYPE_FUNC(func, string) \ > > Taking into consideration the commit message warning about string > constants, would it make sense to update the comment to mention that > limitation?
I think the temptation to pass a string pointer is low -- if only because there aren't any in this file. But adding such a warning can't hurt, so yeah, why not?
Show 12 quoted lines
>
> /* Test a character type. (Only use with string constants.) */
> #define TEST_CTYPE_FUNC(func, string) \
>
>> static void test_ctype_##func(void) { \
>> for (int i = 0; i < 256; i++) { \
>> - if (!check_int(func(i), ==, is_in(string, i))) \
>> + int expect = !!memchr(string, i, sizeof(string) - 1); \
>> + if (!check_int(func(i), ==, expect)) \
>> test_msg(" i: 0x%02x", i); \
>> } \
>> if (!check(!func(EOF))) \