summaryrefslogtreecommitdiff
path: root/extra
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2021-11-23 09:36:04 +0300
committerIvan Maidanski <ivmai@mail.ru>2021-11-23 09:38:42 +0300
commitbd85d715ac6ab34815835c64cb6d8c9f7abec5ef (patch)
tree4b296468fdc1d0154fcc95a229d0e089a5683660 /extra
parentf6b65d9e617795846e33b3f8e4391a4f028bf48d (diff)
downloadbdwgc-bd85d715ac6ab34815835c64cb6d8c9f7abec5ef.tar.gz
Fix 'unresolved __imp__wsprintfA' linker error in msvc_dbg.c (MSVC)
_snprintf does not require linking with user32.lib, unlike wsprintf. * extra/msvc_dbg.c [!_M_ARM && !_M_ARM64 && !_M_X64 && _MSC_VER]: Include stdio.h. * extra/msvc_dbg.c [!_M_ARM && !_M_ARM64 && !_M_X64 && _MSC_VER] (GC_SNPRINTF): Define macro (to _snprintf). * extra/msvc_dbg.c [!_M_ARM && !_M_ARM64 && !_M_X64 && _MSC_VER] (GetDescriptionFromAddress): Reduce str size from 128 to 20; call GC_SNPRINTF() instead of wsprintf(); ensure trailing '\0' in str after GC_SNPRINTF().
Diffstat (limited to 'extra')
-rw-r--r--extra/msvc_dbg.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/extra/msvc_dbg.c b/extra/msvc_dbg.c
index 2f58c01a..610068fa 100644
--- a/extra/msvc_dbg.c
+++ b/extra/msvc_dbg.c
@@ -26,6 +26,7 @@
/* TODO: arm[64], x86_64 currently miss some machine-dependent code below. */
/* See also GC_HAVE_BUILTIN_BACKTRACE in gc_config_macros.h. */
+#include <stdio.h>
#include <stdlib.h>
#define GC_BUILD
@@ -300,11 +301,13 @@ static size_t GetFileLineFromAddress(void* address, char* fileName,
return strlen(sourceName);
}
+#define GC_SNPRINTF _snprintf
+
static size_t GetDescriptionFromAddress(void* address, const char* format,
char* buffer, size_t size)
{
- char*const begin = buffer;
- char*const end = buffer + size;
+ char* const begin = buffer;
+ char* const end = buffer + size;
size_t line_number = 0;
(void)format;
@@ -315,9 +318,10 @@ static size_t GetDescriptionFromAddress(void* address, const char* format,
size = (GC_ULONG_PTR)end < (GC_ULONG_PTR)buffer ? 0 : end - buffer;
if (line_number) {
- char str[128];
+ char str[20];
- wsprintf(str, "(%d) : ", (int)line_number);
+ (void)GC_SNPRINTF(str, sizeof(str), "(%d) : ", (int)line_number);
+ str[sizeof(str) - 1] = '\0';
if (size) {
strncpy(buffer, str, size)[size - 1] = 0;
}