From 663650cb619741d3e3ebbb1ffcfe02a283190b49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Tue, 1 Apr 2025 16:37:26 +0800 Subject: [PATCH] Util (Windows): fix possible errors in `Unicode.c` --- src/util/windows/unicode.c | 16 +++------------- src/util/windows/unicode.h | 6 +++++- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/util/windows/unicode.c b/src/util/windows/unicode.c index cf75a071c..a6d758ff3 100644 --- a/src/util/windows/unicode.c +++ b/src/util/windows/unicode.c @@ -11,22 +11,12 @@ void ffStrbufSetNWS(FFstrbuf* result, uint32_t length, const wchar_t* source) } int size_needed = WideCharToMultiByte(CP_UTF8, 0, source, (int)length, NULL, 0, NULL, NULL); - ffStrbufEnsureFree(result, (uint32_t)size_needed); - WideCharToMultiByte(CP_UTF8, 0, source, (int)length, result->chars, size_needed, NULL, NULL); - result->length = (uint32_t)size_needed; - result->chars[size_needed] = '\0'; -} - -void ffStrbufInitNWS(FFstrbuf* result, uint32_t length, const wchar_t* source) -{ - if(!length) + if (size_needed < 0) { - ffStrbufInit(result); + ffStrbufSetF(result, "WCTMB failed: %u", (unsigned) GetLastError()); return; } - - int size_needed = WideCharToMultiByte(CP_UTF8, 0, source, (int)length, NULL, 0, NULL, NULL); - ffStrbufInitA(result, (uint32_t)size_needed + 1); + ffStrbufEnsureFixedLengthFree(result, (uint32_t)size_needed); WideCharToMultiByte(CP_UTF8, 0, source, (int)length, result->chars, size_needed, NULL, NULL); result->length = (uint32_t)size_needed; result->chars[size_needed] = '\0'; diff --git a/src/util/windows/unicode.h b/src/util/windows/unicode.h index 783cf6787..b34c3ffca 100644 --- a/src/util/windows/unicode.h +++ b/src/util/windows/unicode.h @@ -11,7 +11,11 @@ static inline void ffStrbufSetWS(FFstrbuf* result, const wchar_t* source) return ffStrbufSetNWS(result, (uint32_t)wcslen(source), source); } -void ffStrbufInitNWS(FFstrbuf* result, uint32_t length, const wchar_t* source); +static inline void ffStrbufInitNWS(FFstrbuf* result, uint32_t length, const wchar_t* source) +{ + ffStrbufInit(result); + return ffStrbufSetNWS(result, length, source); +} static inline void ffStrbufInitWS(FFstrbuf* result, const wchar_t* source) {