summaryrefslogtreecommitdiffstats
path: root/src/include/k5-platform.h
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2004-07-14 01:33:35 +0000
committerKen Raeburn <raeburn@mit.edu>2004-07-14 01:33:35 +0000
commit1689fcdeda3df29895e09bfccb315d1f38c8ce55 (patch)
treeb29de1d95e9a2ae753ca6a80722f9cb61785026b /src/include/k5-platform.h
parent8d46a953ba091b0e91a25ba412526ec3d573a70a (diff)
downloadkrb5-1689fcdeda3df29895e09bfccb315d1f38c8ce55.tar.gz
krb5-1689fcdeda3df29895e09bfccb315d1f38c8ce55.tar.xz
krb5-1689fcdeda3df29895e09bfccb315d1f38c8ce55.zip
* k5-platform.h (k5_call_init_function) [DELAY_INITIALIZER] [__GNUC__]: Use a
statement expression so any line number info printed by assertion failures is useful. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16589 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/include/k5-platform.h')
-rw-r--r--src/include/k5-platform.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/include/k5-platform.h b/src/include/k5-platform.h
index bf8a584322..e0793f6290 100644
--- a/src/include/k5-platform.h
+++ b/src/include/k5-platform.h
@@ -168,6 +168,18 @@ typedef struct { k5_once_t once; int error, did_run; void (*fn)(void); } k5_init
static int NAME(void)
# define CALL_INIT_FUNCTION(NAME) \
k5_call_init_function(& JOIN__2(NAME, once))
+# ifdef __GNUC__
+/* Do it in macro form so we get the file/line of the invocation if
+ the assertion fails. */
+# define k5_call_init_function(I) \
+ (__extension__ ({ \
+ k5_init_t *k5int_i = (I); \
+ int k5int_err = k5_once(&k5int_i->once, k5int_i->fn); \
+ (k5int_err \
+ ? k5int_err \
+ : (assert(k5int_i->did_run != 0), k5int_i->error)); \
+ }))
+# else
static inline int k5_call_init_function(k5_init_t *i)
{
int err;
@@ -177,6 +189,7 @@ static inline int k5_call_init_function(k5_init_t *i)
assert (i->did_run != 0);
return i->error;
}
+# endif
/* This should be called in finalization only, so we shouldn't have
multiple active threads mucking around in our library at this
point. So ignore the once_t object and just look at the flag.