Index: core/include/fxcrt/fx_system.h |
diff --git a/core/include/fxcrt/fx_system.h b/core/include/fxcrt/fx_system.h |
index a875da5f9c6fb035a8c26730eb8ebd93672a1239..d030bf70d645807531c7dd5ed7faa11f2f04b837 100644 |
--- a/core/include/fxcrt/fx_system.h |
+++ b/core/include/fxcrt/fx_system.h |
@@ -34,8 +34,9 @@ |
#endif |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
#define _CRT_SECURE_NO_WARNINGS |
+#include <sal.h> |
#include <windows.h> |
-#endif |
+#endif // _FXM_PLATFORM_WINDOWS_ |
#define _FX_W32_ 1 |
#define _FX_W64_ 2 |
#ifndef _FX_WORDSIZE_ |
@@ -137,13 +138,18 @@ typedef FX_UINT64 FX_QWORD; |
#define FX_MAX(a, b) (((a) > (b)) ? (a) : (b)) |
#define FX_MIN(a, b) (((a) < (b)) ? (a) : (b)) |
#define FX_PI 3.1415926535897932384626433832795f |
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
-#define FXSYS_snprintf _snprintf |
-#define FXSYS_vsnprintf _vsnprintf |
+ |
+// NOTE: prevent use of the return value from snprintf() since some platforms |
+// have different return values (e.g. windows _vsnprintf()), and provide |
+// versions that always NUL-terminate. |
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ && _MSC_VER < 1900 |
+void FXSYS_snprintf(char *str, size_t size, _Printf_format_string_ const char* fmt, ...); |
+void FXSYS_vsnprintf(char *str, size_t size, const char* fmt, va_list ap); |
#else |
-#define FXSYS_snprintf snprintf |
-#define FXSYS_vsnprintf vsnprintf |
+#define FXSYS_snprintf (void) snprintf |
+#define FXSYS_vsnprintf (void) vsnprintf |
#endif |
+ |
#define FXSYS_sprintf DO_NOT_USE_SPRINTF_DIE_DIE_DIE |
#define FXSYS_vsprintf DO_NOT_USE_VSPRINTF_DIE_DIE_DIE |
#define FXSYS_strchr strchr |