2004-11-24 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* zassert.h: New header file to declare a quagga-specific assert macro.
* log.c: (_zlog_assert_failed) New function called when assert fails
to log the error and abort.
* zebra.h: Include "zassert.h" instead of <assert.h>.
* regex.c: Include "zassert.h" instead of <assert.h>.
* dict.c: Include "zassert.h" instead of <assert.h>.
diff --git a/isisd/ChangeLog b/isisd/ChangeLog
index f8d8d89..20be060 100644
--- a/isisd/ChangeLog
+++ b/isisd/ChangeLog
@@ -1,3 +1,7 @@
+2004-11-24 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
+
+ * dict.c: Include "zassert.h" instead of <assert.h>.
+
2004-10-13 Hasso Tepper <hasso at quagga.net>
* isis_main.c: Initialize access list. Although we haven't route
diff --git a/isisd/dict.c b/isisd/dict.c
index 86206a3..784ec84 100644
--- a/isisd/dict.c
+++ b/isisd/dict.c
@@ -14,19 +14,19 @@
* into proprietary software; there is no requirement for such software to
* contain a copyright notice related to this source.
*
- * $Id: dict.c,v 1.2 2004/09/10 20:48:21 hasso Exp $
+ * $Id: dict.c,v 1.3 2004/11/24 17:14:49 ajs Exp $
* $Name: $
*/
#include <stdlib.h>
#include <stddef.h>
-#include <assert.h>
+#include "zassert.h"
#define DICT_IMPLEMENTATION
#include "dict.h"
#ifdef KAZLIB_RCSID
static const char rcsid[] =
- "$Id: dict.c,v 1.2 2004/09/10 20:48:21 hasso Exp $";
+ "$Id: dict.c,v 1.3 2004/11/24 17:14:49 ajs Exp $";
#endif
/*
diff --git a/lib/ChangeLog b/lib/ChangeLog
index 10092d1..6ba1d6f 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,11 @@
+2004-11-24 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
+
+ * zassert.h: New header file to declare a quagga-specific assert macro.
+ * log.c: (_zlog_assert_failed) New function called when assert fails
+ to log the error and abort.
+ * zebra.h: Include "zassert.h" instead of <assert.h>.
+ * regex.c: Include "zassert.h" instead of <assert.h>.
+
2004-11-23 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* sigevent.c: (signal_init) Set up some default signal handlers
diff --git a/lib/log.c b/lib/log.c
index c55bfcb..38f8ece 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -315,6 +315,15 @@
#undef PLOG_FUNC
+void
+_zlog_assert_failed (const char *assertion, const char *file,
+ unsigned int line, const char *function)
+{
+ zlog_err("Assertion `%s' failed in file %s, line %u, function %s",
+ assertion,file,line,(function ? function : "?"));
+ abort();
+}
+
/* Open log stream */
struct zlog *
diff --git a/lib/regex.c b/lib/regex.c
index 2eb7c11..2f90dde 100644
--- a/lib/regex.c
+++ b/lib/regex.c
@@ -613,7 +613,7 @@
# include <stdio.h>
/* It is useful to test things that ``must'' be true when debugging. */
-# include <assert.h>
+# include "zassert.h"
static int debug;
diff --git a/lib/zassert.h b/lib/zassert.h
new file mode 100644
index 0000000..77ebf5d
--- /dev/null
+++ b/lib/zassert.h
@@ -0,0 +1,23 @@
+#ifndef _QUAGGA_ASSERT_H
+#define _QUAGGA_ASSERT_H
+
+extern void _zlog_assert_failed (const char *assertion, const char *file,
+ unsigned int line, const char *function)
+ __attribute__ ((noreturn));
+
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+#define __ASSERT_FUNCTION __func__
+#elif defined(__GNUC__)
+#define __ASSERT_FUNCTION __FUNCTION__
+#else
+#define __ASSERT_FUNCTION NULL
+#endif
+
+#define zassert(EX) ((void)((EX) ? 0 : \
+ (_zlog_assert_failed(#EX, __FILE__, __LINE__, \
+ __ASSERT_FUNCTION), 0)))
+
+#undef assert
+#define assert(EX) zassert(EX)
+
+#endif /* _QUAGGA_ASSERT_H */
diff --git a/lib/zebra.h b/lib/zebra.h
index f2c396d..5d0e238 100644
--- a/lib/zebra.h
+++ b/lib/zebra.h
@@ -95,7 +95,7 @@
/* misc include group */
#include <stdarg.h>
-#include <assert.h>
+#include "zassert.h"
#ifdef HAVE_LCAPS
#include <sys/capability.h>