-/* ----------------------------------------------------------------------------
- * $Id$
- * ----------------------------------------------------------------------------
- * Public Domain C Library - http://pdclib.sourceforge.net
- * This code is Public Domain. Use, modify, and redistribute at will.
- * ----------------------------------------------------------------------------
- * Diagnostics
- * --------------------------------------------------------------------------*/
+/* Diagnostics <assert.h>
-#ifndef _ASSERT_H
-#define _ASSERT_H _ASSERT_H
+ This file is part of the Public Domain C Library (PDCLib).
+ Permission is granted to use, modify, and / or redistribute at will.
+*/
-/* ----------------------------------------------------------------------------
- * AUXILIARY
- * --------------------------------------------------------------------------*/
+#include "_PDCLIB_aux.h"
-/* Helper function doing the print to stderr and call to abort(). */
-void __assert( char const * const expression, /* the tested expression */
- char const * const file, /* name of source file */
- char const * const function, /* name of function */
- int const line ); /* number of source file line */
-
-#endif /* _ASSERT_H - note that the header guard ends here on purpose. The
- assert macro is redefined upon each inclusion, in
- dependence of NDEBUG. */
-
-/* ----------------------------------------------------------------------------
- * DEFINES
- * --------------------------------------------------------------------------*/
+#ifndef _PDCLIB_ASSERT_H
+#define _PDCLIB_ASSERT_H _PDCLIB_ASSERT_H
+void _PDCLIB_assert99( char const * const, char const * const, char const * const );
+void _PDCLIB_assert89( char const * const );
+#endif
+/* If NDEBUG is set, assert() is a null operation. */
#undef assert
-#if defined NDEBUG
-#define assert( x ) ( (void) 0 )
+
+#ifdef NDEBUG
+#define assert( ignore ) ( (void) 0 )
+#else
+#if __STDC_VERSION__ >= 199901L
+#define assert( expression ) ( ( expression ) ? (void) 0 \
+ : _PDCLIB_assert99( "Assertion failed: " #expression \
+ ", function ", __func__, \
+ ", file " __FILE__ \
+ ", line " _PDCLIB_symbol2string( __LINE__ ) \
+ "." _PDCLIB_endl ) )
#else
-#define assert( x ) ( x ) ? ( (void) 0 ) \
- : __assert( #x, __FILE__, __func__, __LINE__ )
+#define assert( expression ) ( ( expression ) ? (void) 0 \
+ : _PDCLIB_assert89( "Assertion failed: " #expression \
+ ", file " __FILE__ \
+ ", line " _PDCLIB_symbol2string( __LINE__ ) \
+ "." _PDCLIB_endl ) )
+#endif
#endif