Skip to content

Commit ea12f2d

Browse files
committed
cstring: wrap const-generic string functions in parentheses to bypass glibc macros
When using glibc 2.43+ and defining _GNU_SOURCE, the header <string.h> implicitly enables C23 source features. This activates the new type-generic __glibc_const_generic macros for core functions like strchr, memchr, strrchr, strstr, and strpbrk. Consequently, if these functions are passed a `const char*` or `const void*`, the macros enforce a `const` return type, even when compiling in older C standards. Because our test functions act as wrappers that intentionally return mutable pointers from const arguments, compiling this file was generating warnings. Wrap the function identifiers in parentheses to suppresses preprocessor macro expansion, forcing the legacy behavior.
1 parent b133991 commit ea12f2d

1 file changed

Lines changed: 5 additions & 5 deletions

File tree

rules/cstring/src.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,27 @@ int f3(const void *s1, const void *s2, size_t n) { return memcmp(s1, s2, n); }
1313

1414
void *f4(void *dst, const void *src, size_t n) { return memmove(dst, src, n); }
1515

16-
char *f5(const char *a0, int a1) { return strchr(a0, a1); }
16+
char *f5(const char *a0, int a1) { return (strchr)(a0, a1); }
1717

1818
size_t f7(const char *a0) { return strlen(a0); }
1919

2020
int f8(const char *a0, const char *a1) { return strcmp(a0, a1); }
2121

2222
int f9(const char *a0, const char *a1, size_t a2) { return strncmp(a0, a1, a2); }
2323

24-
void *f10(const void *a0, int a1, size_t a2) { return memchr(a0, a1, a2); }
24+
void *f10(const void *a0, int a1, size_t a2) { return (memchr)(a0, a1, a2); }
2525

26-
char *f11(const char *a0, int a1) { return strrchr(a0, a1); }
26+
char *f11(const char *a0, int a1) { return (strrchr)(a0, a1); }
2727

2828
char *f15(const char *a0) { return strdup(a0); }
2929

3030
size_t f16(const char *a0, const char *a1) { return strcspn(a0, a1); }
3131

3232
size_t f17(const char *a0, const char *a1) { return strspn(a0, a1); }
3333

34-
char *f18(const char *a0, const char *a1) { return strstr(a0, a1); }
34+
char *f18(const char *a0, const char *a1) { return (strstr)(a0, a1); }
3535

36-
char *f21(const char *a0, const char *a1) { return strpbrk(a0, a1); }
36+
char *f21(const char *a0, const char *a1) { return (strpbrk)(a0, a1); }
3737

3838
#if defined(__linux__)
3939
void *f24(const void *a0, int a1, size_t a2) { return memrchr(a0, a1, a2); }

0 commit comments

Comments
 (0)