Re: [PATCH] selftests/nolibc: Fix build with host headers and libc

From: David Laight

Date: Mon Feb 16 2026 - 17:21:30 EST


On Mon, 16 Feb 2026 19:51:24 +0100
Thomas Weißschuh <linux@xxxxxxxxxxxxxx> wrote:

> On 2026-02-14 11:57:24+0000, david.laight.linux@xxxxxxxxx wrote:
> > From: David Laight <david.laight.linux@xxxxxxxxx>
> >
> > Many systems don't have strlcpy() or strlcat().
> > Change is_nolibc to a #define so that the calls are optimised out.
> > Create #define wrappers so the code is syntactially valid.
> >
> > Additionall readdir_r() is likely to be marked deprecated.
>
> "Additionally"
>
> > So disable "-Wdeprecated-declarations".
>
> Could you split this into multiple patches?
>
> > Fixes: 6fe8360b16acb ("selftests/nolibc: also test libc-test through regular selftest framework")
> > Signed-off-by: David Laight <david.laight.linux@xxxxxxxxx>
> > ---
> > tools/testing/selftests/nolibc/nolibc-test.c | 13 +++++++++----
> > 1 file changed, 9 insertions(+), 4 deletions(-)
> >
> > diff --git a/tools/testing/selftests/nolibc/nolibc-test.c b/tools/testing/selftests/nolibc/nolibc-test.c
> > index 1b9d3b2e2491..eb2421b42e75 100644
> > --- a/tools/testing/selftests/nolibc/nolibc-test.c
> > +++ b/tools/testing/selftests/nolibc/nolibc-test.c
> > @@ -66,13 +66,18 @@ static const char *argv0;
> > /* will be used by constructor tests */
> > static int constructor_test_value;
> >
> > -static const int is_nolibc =
> > #ifdef NOLIBC
> > - 1
> > +#define is_nolibc 1
> > #else
> > - 0
> > +#define is_nolibc 0
> > +/* strlcat() and strlcpy() may not be in the system headers. */
> > +#undef strlcat
> > +#undef strlcpy
> > +#define strlcat(d, s, l) 0
> > +#define strlcpy(d, s, l) 0
> > +/* readdir_r() is likely to be marked deprecated */
> > +#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
> > #endif
>
> I'd prefer to disable this via $(cc-option) in the Makefile.
> Unknown pragmas tend to introduce more warnings.

There is already a similar pragma in the file and this one isn't a new one warning.
The other option is to disable the test for !is_nolibc and #define readir_r() away.

That may not need is_nolibc changing to be a #define.

David

>
> > -;
> >
> > /* definition of a series of tests */
> > struct test {
> > --
> > 2.39.5
> >