On 2025-09-21 09:55:11+0200, Willy Tarreau wrote: > Hi Benjamin, > > On Fri, Sep 19, 2025 at 05:34:12PM +0200, Benjamin Berg wrote: > > From: Benjamin Berg <[email protected]> > > > > There is no errno variable when NOLIBC_IGNORE_ERRNO is defined. As such, > > the perror function does not make any sense then and cannot compile. > > > > Fixes: acab7bcdb1bc ("tools/nolibc/stdio: add perror() to report the errno > > value") > > Signed-off-by: Benjamin Berg <[email protected]> > > Acked-by: Thomas Weißschuh <[email protected]> > > --- > > tools/include/nolibc/stdio.h | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git a/tools/include/nolibc/stdio.h b/tools/include/nolibc/stdio.h > > index 7630234408c5..c512159b8374 100644 > > --- a/tools/include/nolibc/stdio.h > > +++ b/tools/include/nolibc/stdio.h > > @@ -597,11 +597,13 @@ int sscanf(const char *str, const char *format, ...) > > return ret; > > } > > > > +#ifndef NOLIBC_IGNORE_ERRNO > > static __attribute__((unused)) > > void perror(const char *msg) > > { > > fprintf(stderr, "%s%serrno=%d\n", (msg && *msg) ? msg : "", (msg && > > *msg) ? ": " : "", errno); > > } > > +#endif > > Please instead place the ifndef inside the function so that code calling > perror() continues to build. The original goal of that macro was to > further shrink programs at the expense of losing error details. But we > should be able to continue to build working programs with that macro > defined. There's nothing hard set in stone regarding this but here it's > easy to preserve a working behavior by having something like this for > example: > > static __attribute__((unused)) > void perror(const char *msg) > { > +#ifdef NOLIBC_IGNORE_ERRNO > + fprintf(stderr, "%s\n", (msg && *msg) ? msg : "unknown error"); > +#else > fprintf(stderr, "%s%serrno=%d\n", (msg && *msg) ? msg : "", (msg && > *msg) ? ": " : "", errno); > +#endif > }
For the plain `errno` variable and printf(%m) we don't have such fallbacks. With NOLIBC_IGNORE_ERRNO the compilation either fails or the results are undefined. Personally I prefer not defining perror() here. Thomas

