summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/ap_config.h9
-rw-r--r--include/http_protocol.h2
-rw-r--r--include/http_request.h2
-rw-r--r--include/util_cookies.h8
-rw-r--r--include/util_filter.h5
-rw-r--r--include/util_script.h3
6 files changed, 18 insertions, 11 deletions
diff --git a/include/ap_config.h b/include/ap_config.h
index 0f67c3f07f..ea2c19581b 100644
--- a/include/ap_config.h
+++ b/include/ap_config.h
@@ -173,4 +173,13 @@
#define AP_HAVE_DESIGNATED_INITIALIZER
#endif
+#ifndef __has_attribute /* check for supported attributes on clang */
+#define __has_attribute(x) 0
+#endif
+#if (defined(__GNUC__) && __GNUC__ >= 4) || __has_attribute(sentinel)
+#define ap_func_attr_sentinel __attribute__((sentinel))
+#else
+#define ap_func_attr_sentinel
+#endif
+
#endif /* AP_CONFIG_H */
diff --git a/include/http_protocol.h b/include/http_protocol.h
index 705268efe3..b33279bca8 100644
--- a/include/http_protocol.h
+++ b/include/http_protocol.h
@@ -346,7 +346,7 @@ static inline int ap_rputs(const char *str, request_rec *r)
* @return The number of bytes sent
*/
AP_DECLARE_NONSTD(int) ap_rvputs(request_rec *r,...)
- __attribute__((sentinel));
+ ap_func_attr_sentinel;
/**
* Output data to the client in a printf format
diff --git a/include/http_request.h b/include/http_request.h
index e591f6ea2c..644079eb10 100644
--- a/include/http_request.h
+++ b/include/http_request.h
@@ -285,7 +285,7 @@ AP_DECLARE(void) ap_update_mtime(request_rec *r, apr_time_t dependency_mtime);
* @return None.
*/
AP_DECLARE(void) ap_allow_methods(request_rec *r, int reset, ...)
- __attribute__((sentinel));
+ ap_func_attr_sentinel;
/**
* Add one or more methods to the list permitted to access the resource.
diff --git a/include/util_cookies.h b/include/util_cookies.h
index 439d28926d..c424dc045d 100644
--- a/include/util_cookies.h
+++ b/include/util_cookies.h
@@ -68,7 +68,7 @@ typedef struct {
AP_DECLARE(apr_status_t) ap_cookie_write(request_rec * r, const char *name,
const char *val, const char *attrs,
long maxage, ...)
- __attribute__((sentinel));
+ ap_func_attr_sentinel;
/**
* Write an RFC2965 compliant cookie.
@@ -85,7 +85,7 @@ AP_DECLARE(apr_status_t) ap_cookie_write(request_rec * r, const char *name,
AP_DECLARE(apr_status_t) ap_cookie_write2(request_rec * r, const char *name2,
const char *val, const char *attrs2,
long maxage, ...)
- __attribute__((sentinel));
+ ap_func_attr_sentinel;
/**
* Remove an RFC2109 compliant cookie.
@@ -99,7 +99,7 @@ AP_DECLARE(apr_status_t) ap_cookie_write2(request_rec * r, const char *name2,
*/
AP_DECLARE(apr_status_t) ap_cookie_remove(request_rec * r, const char *name,
const char *attrs, ...)
- __attribute__((sentinel));
+ ap_func_attr_sentinel;
/**
* Remove an RFC2965 compliant cookie.
@@ -113,7 +113,7 @@ AP_DECLARE(apr_status_t) ap_cookie_remove(request_rec * r, const char *name,
*/
AP_DECLARE(apr_status_t) ap_cookie_remove2(request_rec * r, const char *name2,
const char *attrs2, ...)
- __attribute__((sentinel));
+ ap_func_attr_sentinel;
/**
* Read a cookie called name, placing its value in val.
diff --git a/include/util_filter.h b/include/util_filter.h
index 449889d1a6..5c8245d7cf 100644
--- a/include/util_filter.h
+++ b/include/util_filter.h
@@ -547,10 +547,7 @@ AP_DECLARE(apr_status_t) ap_fflush(ap_filter_t *f, apr_bucket_brigade *bb);
AP_DECLARE_NONSTD(apr_status_t) ap_fputstrs(ap_filter_t *f,
apr_bucket_brigade *bb,
...)
-#if defined(__GNUC__) && __GNUC__ >= 4
- __attribute__((sentinel))
-#endif
-;
+ ap_func_attr_sentinel;
/**
* Output data to the filter in printf format
diff --git a/include/util_script.h b/include/util_script.h
index 04511c9768..e019aaefd8 100644
--- a/include/util_script.h
+++ b/include/util_script.h
@@ -27,6 +27,7 @@
#define APACHE_UTIL_SCRIPT_H
#include "apr_buckets.h"
+#include "ap_config.h"
#ifdef __cplusplus
extern "C" {
@@ -123,7 +124,7 @@ AP_DECLARE_NONSTD(int) ap_scan_script_header_err_strs(request_rec *r,
char *buffer,
const char **termch,
int *termarg, ...)
- __attribute__((sentinel));
+ ap_func_attr_sentinel;
/**
* Read headers output from a script, ensuring that the output is valid. If