E void VDECL(raw_printf, (const char *, ...)) PRINTF_F(1, 2);
E void VDECL(impossible, (const char *, ...)) PRINTF_F(1, 2);
E void VDECL(config_error_add, (const char *, ...)) PRINTF_F(1, 2);
-E void FDECL(nhassert_failed, (const char *, const char *, int));
+E void FDECL(nhassert_failed, (const char *, int));
/* ### polyself.c ### */
/* Supply nhassert macro if not supplied by port */
#ifndef nhassert
#define nhassert(expression) (void)((!!(expression)) || \
- (nhassert_failed(#expression, __FILE__, __LINE__), 0))
+ (nhassert_failed(__FILE__, __LINE__), 0))
#endif
#endif /* GLOBAL_H */
#ifndef HAS_STDINT_H
#define HAS_STDINT_H /* force include of stdint.h in integer.h */
#endif
+/* Turn on some additional warnings */
+#pragma warning(3:4389)
#endif /* _MSC_VER */
/* The following is needed for prototypes of certain functions */
#include "system.h"
#endif
+/* Override the default version of nhassert. The default version is unable
+ * to generate a string form of the expression due to the need to be
+ * compatible with compilers which do not support macro stringization (i.e.
+ * #x to turn x into its string form).
+ */
+extern void FDECL(nt_assert_failed, (const char *, const char *, int));
+#define nhassert(expression) (void)((!!(expression)) || \
+ (nt_assert_failed(#expression, __FILE__, __LINE__), 0))
+
#endif /* NTCONF_H */
}
/* nhassert_failed is called when an nhassert's condition is false */
-void nhassert_failed(const char * exp, const char * file, int line)
+void
+nhassert_failed(filepath, line)
+ const char * filepath;
+ int line;
{
- impossible("NHASSERT(%s) in '%s' at line %d", exp, file, line);
+ const char * filename;
+
+ /* attempt to get filename from path. TODO: we really need a port provided
+ * function to return a filename from a path */
+ filename = strrchr(filepath, '/');
+ filename = (filename == NULL ? strrchr(filepath, '\\') : filename);
+ filename = (filename == NULL ? filepath : filename + 1);
+
+ impossible("nhassert failed in file '%s' at line %d", filename, line);
}
/*pline.c*/
return ourseed;
}
+/* nt_assert_failed is called when an nhassert's condition is false */
+void
+nt_assert_failed(expression, filepath, line)
+ const char * expression;
+ const char * filepath;
+ int line;
+{
+ const char * filename;
+
+ /* get file name from path */
+ filename = strrchr(filepath, '\\');
+ filename = (filename == NULL ? filepath : filename + 1);
+ impossible("nhassert(%s) failed in file '%s' at line %d",
+ expression, filename, line);
+}
+
#endif /* WIN32 */
/*winnt.c*/