From 23feb05c875b6940a2c8f3d4702c023b3744e33e Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Thu, 21 Jul 2022 14:12:01 -0300 Subject: [PATCH] argp: Expand argp_usage, _option_is_short, and _option_is_end The argp code uses macro redefinitions to avoid duplicating static inline implementations for argp_usage, _option_is_short, and _option_is_end. However, this causes build issues with clang, as some function prototypes are redefined to add the hidden attribute with libc_hidden_proto. To avoid extensive changes to internal headers, just expand the function implementations and avoid the macro redefine tricks. --- argp/argp-xinl.c | 32 ++++++++++++++++++++++++-------- argp/argp.h | 10 +++------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/argp/argp-xinl.c b/argp/argp-xinl.c index 37410c0eeb..49088bb851 100644 --- a/argp/argp-xinl.c +++ b/argp/argp-xinl.c @@ -25,19 +25,35 @@ # include #endif -#ifndef __USE_EXTERN_INLINES -# define __USE_EXTERN_INLINES 1 -#endif -#define ARGP_EI -#undef __OPTIMIZE__ -#define __OPTIMIZE__ 1 #include -/* Add weak aliases. */ -#if _LIBC - 0 && defined (weak_alias) +#ifdef _LIBC +void +__argp_usage (const struct argp_state *__state) +{ + __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE); +} weak_alias (__argp_usage, argp_usage) + +int +__option_is_short (const struct argp_option *__opt) +{ + if (__opt->flags & OPTION_DOC) + return 0; + else + { + int __key = __opt->key; + return __key > 0 && __key <= UCHAR_MAX && isprint (__key); + } +} weak_alias (__option_is_short, _option_is_short) + +int +__option_is_end (const struct argp_option *__opt) +{ + return !__opt->key && !__opt->name && !__opt->doc && !__opt->group; +} weak_alias (__option_is_end, _option_is_end) #endif diff --git a/argp/argp.h b/argp/argp.h index 4967c876a2..27391402fd 100644 --- a/argp/argp.h +++ b/argp/argp.h @@ -518,17 +518,13 @@ extern void *__argp_input (const struct argp *__restrict __argp, # define __option_is_end _option_is_end # endif -# ifndef ARGP_EI -# define ARGP_EI __extern_inline -# endif - -ARGP_EI void +__extern_inline void __argp_usage (const struct argp_state *__state) { __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE); } -ARGP_EI int +__extern_inline int __NTH (__option_is_short (const struct argp_option *__opt)) { if (__opt->flags & OPTION_DOC) @@ -540,7 +536,7 @@ __NTH (__option_is_short (const struct argp_option *__opt)) } } -ARGP_EI int +__extern_inline int __NTH (__option_is_end (const struct argp_option *__opt)) { return !__opt->key && !__opt->name && !__opt->doc && !__opt->group; -- 2.47.3