summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2007-06-01 12:01:53 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:53:08 -0500
commitc2781df0d5477be58c3189c6d3c17b261d7b8b89 (patch)
tree9866ad20f9b439bbdca4c6ed6191e3f084f75091
parentaec9320dc2fdf03d5187f60749c5f3ad238bf58d (diff)
downloadsamba-c2781df0d5477be58c3189c6d3c17b261d7b8b89.tar.gz
samba-c2781df0d5477be58c3189c6d3c17b261d7b8b89.tar.bz2
samba-c2781df0d5477be58c3189c6d3c17b261d7b8b89.zip
r23289: Provide support for GCC attributes _PURE_, _NONNULL_, _DEPRECATED_, _NORETURN_ and _WARN_UNUSED_RESULT_.
(This used to be commit 44248f662f0b609dad6a7b437948f12d661a28f7)
-rw-r--r--source4/cluster/ctdb/common/ctdb_util.c2
-rw-r--r--source4/include/includes.h42
-rw-r--r--source4/lib/json/debug.c2
-rw-r--r--source4/lib/json/linkhash.c2
-rw-r--r--source4/lib/util/fault.c2
-rw-r--r--source4/lib/util/util_str.c14
-rwxr-xr-xsource4/script/mkproto.pl7
7 files changed, 52 insertions, 19 deletions
diff --git a/source4/cluster/ctdb/common/ctdb_util.c b/source4/cluster/ctdb/common/ctdb_util.c
index 9a5e51bfa0..49f7a55abf 100644
--- a/source4/cluster/ctdb/common/ctdb_util.c
+++ b/source4/cluster/ctdb/common/ctdb_util.c
@@ -52,7 +52,7 @@ void ctdb_set_error(struct ctdb_context *ctdb, const char *fmt, ...)
/*
a fatal internal error occurred - no hope for recovery
*/
-void ctdb_fatal(struct ctdb_context *ctdb, const char *msg)
+_NORETURN_ void ctdb_fatal(struct ctdb_context *ctdb, const char *msg)
{
DEBUG(0,("ctdb fatal error: %s\n", msg));
fprintf(stderr, "ctdb fatal error: '%s'\n", msg);
diff --git a/source4/include/includes.h b/source4/include/includes.h
index f1188e2aaf..1022b65545 100644
--- a/source4/include/includes.h
+++ b/source4/include/includes.h
@@ -62,17 +62,45 @@
#endif
#endif
-#ifndef NORETURN_ATTRIBUTE
-#if (__GNUC__ >= 3)
-#define NORETURN_ATTRIBUTE __attribute__ ((noreturn))
+#ifndef _DEPRECATED_
+#if (__GNUC__ >= 3) && (__GNUC_MINOR__ >= 1 )
+#define _DEPRECATED_ __attribute__ ((deprecated))
#else
-#define NORETURN_ATTRIBUTE
+#define _DEPRECATED_
#endif
#endif
-/* mark smb_panic() as noreturn, so static analysers know that it is
- used like abort */
-_PUBLIC_ void smb_panic(const char *why) NORETURN_ATTRIBUTE;
+#ifndef _WARN_UNUSED_RESULT_
+#if (__GNUC__ >= 3) && (__GNUC_MINOR__ >= 1 )
+#define _WARN_UNUSED_RESULT_ __attribute__ ((warn_unused_result))
+#else
+#define _WARN_UNUSED_RESULT_
+#endif
+#endif
+
+#ifndef _NORETURN_
+#if (__GNUC__ >= 3) && (__GNUC_MINOR__ >= 1 )
+#define _NORETURN_ __attribute__ ((noreturn))
+#else
+#define _NORETURN_
+#endif
+#endif
+
+#ifndef _PURE_
+#if (__GNUC__ >= 3) && (__GNUC_MINOR__ >= 1)
+#define _PURE_ __attribute__((pure))
+#else
+#define _PURE_
+#endif
+#endif
+
+#ifndef NONNULL
+#if (__GNUC__ >= 3) && (__GNUC_MINOR__ >= 1)
+#define NONNULL(param) param __attribute__((nonnull))
+#else
+#define NONNULL(param) param
+#endif
+#endif
#include "system/time.h"
#include "system/wait.h"
diff --git a/source4/lib/json/debug.c b/source4/lib/json/debug.c
index eaa6fca33c..a315b0e2a4 100644
--- a/source4/lib/json/debug.c
+++ b/source4/lib/json/debug.c
@@ -41,7 +41,7 @@ extern void mc_set_syslog(int syslog)
_syslog = syslog;
}
-void mc_abort(const char *msg, ...)
+_NORETURN_ void mc_abort(const char *msg, ...)
{
va_list ap;
va_start(ap, msg);
diff --git a/source4/lib/json/linkhash.c b/source4/lib/json/linkhash.c
index 6cfc9a0ea6..b04254b597 100644
--- a/source4/lib/json/linkhash.c
+++ b/source4/lib/json/linkhash.c
@@ -20,7 +20,7 @@
#include "linkhash.h"
-void lh_abort(const char *msg, ...)
+_NORETURN_ void lh_abort(const char *msg, ...)
{
va_list ap;
va_start(ap, msg);
diff --git a/source4/lib/util/fault.c b/source4/lib/util/fault.c
index c7d6b7ede6..86a0b61a76 100644
--- a/source4/lib/util/fault.c
+++ b/source4/lib/util/fault.c
@@ -118,7 +118,7 @@ _PUBLIC_ const char *panic_action = NULL;
/**
Something really nasty happened - panic !
**/
-_PUBLIC_ void smb_panic(const char *why)
+_PUBLIC_ _NORETURN_ void smb_panic(const char *why)
{
int result;
diff --git a/source4/lib/util/util_str.c b/source4/lib/util/util_str.c
index 86cd3176c5..c088e26fe5 100644
--- a/source4/lib/util/util_str.c
+++ b/source4/lib/util/util_str.c
@@ -36,16 +36,16 @@
/**
Trim the specified elements off the front and back of a string.
**/
-_PUBLIC_ BOOL trim_string(char *s,const char *front,const char *back)
+_PUBLIC_ bool trim_string(char *s, const char *front, const char *back)
{
- BOOL ret = False;
+ bool ret = false;
size_t front_len;
size_t back_len;
size_t len;
/* Ignore null or empty strings. */
if (!s || (s[0] == '\0'))
- return False;
+ return false;
front_len = front? strlen(front) : 0;
back_len = back? strlen(back) : 0;
@@ -58,7 +58,7 @@ _PUBLIC_ BOOL trim_string(char *s,const char *front,const char *back)
* easily overlap. Found by valgrind. JRA. */
memmove(s, s+front_len, (len-front_len)+1);
len -= front_len;
- ret=True;
+ ret=true;
}
}
@@ -66,7 +66,7 @@ _PUBLIC_ BOOL trim_string(char *s,const char *front,const char *back)
while ((len >= back_len) && strncmp(s+len-back_len,back,back_len)==0) {
s[len-back_len]='\0';
len -= back_len;
- ret=True;
+ ret=true;
}
}
return ret;
@@ -75,7 +75,7 @@ _PUBLIC_ BOOL trim_string(char *s,const char *front,const char *back)
/**
Find the number of 'c' chars in a string
**/
-_PUBLIC_ size_t count_chars(const char *s, char c)
+_PUBLIC_ _PURE_ size_t count_chars(const char *s, char c)
{
size_t count = 0;
@@ -218,7 +218,7 @@ _PUBLIC_ size_t strhex_to_str(char *p, size_t len, const char *strhex)
/**
* Parse a hex string and return a data blob.
*/
-_PUBLIC_ DATA_BLOB strhex_to_data_blob(const char *strhex)
+_PUBLIC_ _PURE_ DATA_BLOB strhex_to_data_blob(const char *strhex)
{
DATA_BLOB ret_blob = data_blob(NULL, strlen(strhex)/2+1);
diff --git a/source4/script/mkproto.pl b/source4/script/mkproto.pl
index 1df53dffbb..ebdd803991 100755
--- a/source4/script/mkproto.pl
+++ b/source4/script/mkproto.pl
@@ -180,7 +180,8 @@ sub process_file($$$)
}
next unless ( $is_public || $line =~ /
- (_DEPRECATED_ )?^(void|BOOL|bool|int|struct|char|const|\w+_[tT]\s|uint|unsigned|long|NTSTATUS|
+ (_DEPRECATED_ |_NORETURN_ |_WARN_UNUSED_RESULT_ |_PURE_ )*^(
+ void|BOOL|bool|int|struct|char|const|\w+_[tT]\s|uint|unsigned|long|NTSTATUS|
ADS_STATUS|enum\s.*\(|DATA_BLOB|WERROR|XFILE|FILE|DIR|
double|TDB_CONTEXT|TDB_DATA|TALLOC_CTX|NTTIME|FN_|init_module|
GtkWidget|GType|smb_ucs2_t|krb5_error_code)
@@ -224,6 +225,10 @@ if ($public_file ne $private_file) {
}
public("#ifndef _PUBLIC_\n#define _PUBLIC_\n#endif\n\n");
+public("#ifndef _PURE_\n#define _PURE_\n#endif\n\n");
+public("#ifndef _NORETURN_\n#define _NORETURN_\n#endif\n\n");
+public("#ifndef _DEPRECATED_\n#define _DEPRECATED_\n#endif\n\n");
+public("#ifndef _WARN_UNUSED_RESULT_\n#define _WARN_UNUSED_RESULT_\n#endif\n\n");
process_file(\&public, \&private, $_) foreach (@ARGV);
print_footer(\&public, $public_define);