diff mbox series

[uclibc-ng-devel] libuargp: restrict compatibility macros in argp.h only

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

Commit Message

Yao Zi April 10, 2024, 6:01 p.m. UTC
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(+)

Comments

Petr Vorel April 10, 2024, 7:25 p.m. UTC | #1
> 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 mbox series

Patch

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 */