Tweaks to nhassert implementation. Change to warnings on MSC build.

This commit is contained in:
Bart House
2020-10-19 15:55:32 -07:00
parent 3842da9dbd
commit 93ce6857d3
5 changed files with 42 additions and 4 deletions
+1 -1
View File
@@ -2020,7 +2020,7 @@ E void VDECL(verbalize, (const char *, ...)) PRINTF_F(1, 2);
E void VDECL(raw_printf, (const char *, ...)) PRINTF_F(1, 2); E void VDECL(raw_printf, (const char *, ...)) PRINTF_F(1, 2);
E void VDECL(impossible, (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 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 ### */ /* ### polyself.c ### */
+1 -1
View File
@@ -428,7 +428,7 @@ struct savefile_info {
/* Supply nhassert macro if not supplied by port */ /* Supply nhassert macro if not supplied by port */
#ifndef nhassert #ifndef nhassert
#define nhassert(expression) (void)((!!(expression)) || \ #define nhassert(expression) (void)((!!(expression)) || \
(nhassert_failed(#expression, __FILE__, __LINE__), 0)) (nhassert_failed(__FILE__, __LINE__), 0))
#endif #endif
#endif /* GLOBAL_H */ #endif /* GLOBAL_H */
+11
View File
@@ -144,6 +144,8 @@ extern void FDECL(interject, (int));
#ifndef HAS_STDINT_H #ifndef HAS_STDINT_H
#define HAS_STDINT_H /* force include of stdint.h in integer.h */ #define HAS_STDINT_H /* force include of stdint.h in integer.h */
#endif #endif
/* Turn on some additional warnings */
#pragma warning(3:4389)
#endif /* _MSC_VER */ #endif /* _MSC_VER */
/* The following is needed for prototypes of certain functions */ /* The following is needed for prototypes of certain functions */
@@ -281,4 +283,13 @@ extern boolean FDECL(file_newer, (const char *, const char *));
#include "system.h" #include "system.h"
#endif #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 */ #endif /* NTCONF_H */
+13 -2
View File
@@ -620,9 +620,20 @@ VA_DECL(const char *, str)
} }
/* nhassert_failed is called when an nhassert's condition is false */ /* 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*/ /*pline.c*/
+16
View File
@@ -717,6 +717,22 @@ sys_random_seed(VOID_ARGS)
return ourseed; 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 */ #endif /* WIN32 */
/*winnt.c*/ /*winnt.c*/