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

This commit is contained in:
Bart House
2019-07-12 18:40:34 -07:00
parent 3842da9dbd
commit 93ce6857d3
5 changed files with 42 additions and 4 deletions

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(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 ### */

View File

@@ -428,7 +428,7 @@ struct savefile_info {
/* 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 */

View File

@@ -144,6 +144,8 @@ extern void FDECL(interject, (int));
#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 */
@@ -281,4 +283,13 @@ extern boolean FDECL(file_newer, (const char *, const char *));
#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 */

View File

@@ -620,9 +620,20 @@ VA_DECL(const char *, str)
}
/* 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*/

View File

@@ -717,6 +717,22 @@ sys_random_seed(VOID_ARGS)
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*/