aboutsummaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
Diffstat (limited to 'misc')
-rw-r--r--misc/bits/syslog-ldbl.h2
-rw-r--r--misc/bits/syslog.h19
-rw-r--r--misc/sys/cdefs.h20
-rw-r--r--misc/sys/syslog.h2
4 files changed, 31 insertions, 12 deletions
diff --git a/misc/bits/syslog-ldbl.h b/misc/bits/syslog-ldbl.h
index d153c8f8cd..714e70c201 100644
--- a/misc/bits/syslog-ldbl.h
+++ b/misc/bits/syslog-ldbl.h
@@ -27,7 +27,7 @@ __LDBL_REDIR_DECL (syslog)
__LDBL_REDIR_DECL (vsyslog)
#endif
-#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
+#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
__LDBL_REDIR_DECL (__syslog_chk)
# ifdef __USE_BSD
diff --git a/misc/bits/syslog.h b/misc/bits/syslog.h
index c0427214e3..f8c81dd9e4 100644
--- a/misc/bits/syslog.h
+++ b/misc/bits/syslog.h
@@ -1,5 +1,5 @@
/* Checking macros for syslog functions.
- Copyright (C) 2005 Free Software Foundation, Inc.
+ Copyright (C) 2005, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -25,8 +25,16 @@
extern void __syslog_chk (int __pri, int __flag, __const char *__fmt, ...)
__attribute__ ((__format__ (__printf__, 3, 4)));
-#define syslog(pri, ...) \
+#ifdef __va_arg_pack
+__extern_always_inline void
+syslog (int __pri, int __flag, __const char *__fmt, ...)
+{
+ return __syslog_chk (__pri, __flag, __fmt, __va_arg_pack ());
+}
+#elif !defined __cplusplus
+# define syslog(pri, ...) \
__syslog_chk (pri, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+#endif
#ifdef __USE_BSD
@@ -34,6 +42,9 @@ extern void __vsyslog_chk (int __pri, int __flag, __const char *__fmt,
__gnuc_va_list __ap)
__attribute__ ((__format__ (__printf__, 3, 0)));
-# define vsyslog(pri, fmt, ap) \
- __vsyslog_chk (pri, __USE_FORTIFY_LEVEL - 1, fmt, ap)
+__extern_always_inline void
+vsyslog (int __pri, __const char *__fmt, __gnuc_va_list __ap)
+{
+ return __vsyslog_chk (__pri, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
+}
#endif
diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
index ab7d327c59..bacfe2f63f 100644
--- a/misc/sys/cdefs.h
+++ b/misc/sys/cdefs.h
@@ -281,13 +281,21 @@
/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
inline semantics, unless -fgnu89-inline is used. */
-#ifdef __GNUC_STDC_INLINE__
-# define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
-# define __extern_always_inline \
+#if !defined __cplusplus || __GNUC_PREREQ (4,3)
+# if defined __GNUC_STDC_INLINE__ || defined __cplusplus
+# define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
+# define __extern_always_inline \
extern __always_inline __attribute__ ((__gnu_inline__))
-#else
-# define __extern_inline extern __inline
-# define __extern_always_inline extern __always_inline
+# else
+# define __extern_inline extern __inline
+# define __extern_always_inline extern __always_inline
+# endif
+#endif
+
+/* GCC 4.3 and above allow passing all anonymous arguments of an
+ __extern_always_inline function to some other vararg function. */
+#if __GNUC_PREREQ (4,3)
+# define __va_arg_pack() __builtin_va_arg_pack ()
#endif
/* It is possible to compile containing GCC extensions even if GCC is
diff --git a/misc/sys/syslog.h b/misc/sys/syslog.h
index 4ed57c2787..22da1ce3e9 100644
--- a/misc/sys/syslog.h
+++ b/misc/sys/syslog.h
@@ -203,7 +203,7 @@ extern void vsyslog (int __pri, __const char *__fmt, __gnuc_va_list __ap)
/* Define some macros helping to catch buffer overflows. */
-#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
+#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
# include <bits/syslog.h>
#endif
#ifdef __LDBL_COMPAT