Message ID | 20240410180159.46938-1-ziyao@disroot.org |
---|---|
State | Superseded |
Headers | show |
Series | [uclibc-ng-devel] libuargp: restrict compatibility macros in argp.h only | expand |
> Macros __attribute__, __format__ and __printf__ are defined in argp.h > for compatibility with ANSI and old gccs. But leaving them effective > out of the scope of the header may break applications relying on > these compiler attributes even with __STRICT_ANSI__ defined. So undef > the macros after using. > --- > include/argp.h | 10 ++++++++++ > 1 file changed, 10 insertions(+) > diff --git a/include/argp.h b/include/argp.h > index 8e8674296..1824c69d6 100644 > --- a/include/argp.h > +++ b/include/argp.h > @@ -562,4 +562,14 @@ __NTH (__option_is_end (__const struct argp_option *__opt)) > } > #endif > +#ifdef __attribute__ > +# if __GNUC__ < 2 ||(__GNUC__ == 2 && __GNUC_MINOR__ < 5) || defined(__STRICT_ANSI__) > +# undef __attribute__ > +# endif > +# if __GNUC__ < 2 ||(__GNUC__ == 2 && __GNUC_MINOR__ < 7) || defined(__STRICT_ANSI__) > +# undef __format__ > +# undef __printf__ > +# endif > +#endif Sounds like a good point. Reviewed-by: Petr Vorel <petr.vorel@gmail.com> I wonder if instead of copy paste the if conditions wouldn't be better something like: +++ include/argp.h @@ -46,12 +46,14 @@ /* This feature is available in gcc versions 2.5 and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || defined(__STRICT_ANSI__) # define __attribute__(Spec) /* empty */ +# define __UCLIBC_ATTRIBUTE_FALLBACK__ # endif /* The __-protected variants of `format' and `printf' attributes are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) || defined(__STRICT_ANSI__) # define __format__ format # define __printf__ printf +# define __UCLIBC_PRINTF_FALLBACK__ # endif #endif @@ -562,4 +564,13 @@ __NTH (__option_is_end (__const struct argp_option *__opt)) } #endif +#ifdef __UCLIBC_ATTRIBUTE_FALLBACK__ +# undef __attribute__ +#endif + +#ifdef __UCLIBC_PRINTF_FALLBACK__ +# undef __format__ +# undef __printf__ +#endif + #endif /* argp.h */ Kind regards, Petr > + > #endif /* argp.h */
diff --git a/include/argp.h b/include/argp.h index 8e8674296..1824c69d6 100644 --- a/include/argp.h +++ b/include/argp.h @@ -562,4 +562,14 @@ __NTH (__option_is_end (__const struct argp_option *__opt)) } #endif +#ifdef __attribute__ +# if __GNUC__ < 2 ||(__GNUC__ == 2 && __GNUC_MINOR__ < 5) || defined(__STRICT_ANSI__) +# undef __attribute__ +# endif +# if __GNUC__ < 2 ||(__GNUC__ == 2 && __GNUC_MINOR__ < 7) || defined(__STRICT_ANSI__) +# undef __format__ +# undef __printf__ +# endif +#endif + #endif /* argp.h */