diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2021-11-23 09:36:04 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2021-11-23 09:38:42 +0300 |
commit | bd85d715ac6ab34815835c64cb6d8c9f7abec5ef (patch) | |
tree | 4b296468fdc1d0154fcc95a229d0e089a5683660 /extra | |
parent | f6b65d9e617795846e33b3f8e4391a4f028bf48d (diff) | |
download | bdwgc-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.c | 12 |
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; } |