argp: Expand argp_usage, _option_is_short, and _option_is_end

The argp code uses some clever macro redefine to avoid need to
duplicate the optimized static inline implementations for
argp_usage, _option_is_short, and _option_is_end.  This however
leads to some build issues with clang, since some function
prototypes are redefined to add the hidden attribute with
libc_hidden_proto.

To avoid extensive changes on internal headers, just expand the
function implementations and avoid the macro redefine tricks.
This commit is contained in:
Adhemerval Zanella 2022-07-21 14:12:01 -03:00
parent 75d657d295
commit 67005f5298
2 changed files with 27 additions and 19 deletions

View File

@ -25,19 +25,31 @@
# include <features.h> # include <features.h>
#endif #endif
#ifndef __USE_EXTERN_INLINES
# define __USE_EXTERN_INLINES 1
#endif
#define ARGP_EI
#undef __OPTIMIZE__
#define __OPTIMIZE__ 1
#include <argp.h> #include <argp.h>
/* Add weak aliases. */ void
#if _LIBC - 0 && defined (weak_alias) __argp_usage (const struct argp_state *__state)
{
__argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
}
weak_alias (__argp_usage, argp_usage) weak_alias (__argp_usage, argp_usage)
weak_alias (__option_is_short, _option_is_short)
weak_alias (__option_is_end, _option_is_end)
#endif 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)

View File

@ -518,17 +518,13 @@ extern void *__argp_input (const struct argp *__restrict __argp,
# define __option_is_end _option_is_end # define __option_is_end _option_is_end
# endif # endif
# ifndef ARGP_EI __extern_inline void
# define ARGP_EI __extern_inline
# endif
ARGP_EI void
__argp_usage (const struct argp_state *__state) __argp_usage (const struct argp_state *__state)
{ {
__argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE); __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
} }
ARGP_EI int __extern_inline int
__NTH (__option_is_short (const struct argp_option *__opt)) __NTH (__option_is_short (const struct argp_option *__opt))
{ {
if (__opt->flags & OPTION_DOC) 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)) __NTH (__option_is_end (const struct argp_option *__opt))
{ {
return !__opt->key && !__opt->name && !__opt->doc && !__opt->group; return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;