From e41951c43a8f6a0bcf6b0fcceebec99f87f7d1e7 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 10 Dec 2024 22:22:44 -0500 Subject: Support building for Windows with or without UNICODE --- src/win32/environment_win32.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/win32/environment_win32.c') diff --git a/src/win32/environment_win32.c b/src/win32/environment_win32.c index 64feee5..ce5f00e 100644 --- a/src/win32/environment_win32.c +++ b/src/win32/environment_win32.c @@ -1,6 +1,8 @@ // Copyright 2012-2024 David Robillard // SPDX-License-Identifier: ISC +#include "win32_util.h" + #include #include @@ -9,14 +11,27 @@ char* zix_expand_environment_strings(ZixAllocator* const allocator, const char* const string) { - const DWORD size = ExpandEnvironmentStrings(string, NULL, 0U); + ArgPathChar* const wstring = arg_path_new(allocator, string); + + const DWORD size = ExpandEnvironmentStrings(wstring, NULL, 0U); if (!size) { + arg_path_free(allocator, wstring); return NULL; } - char* const out = (char*)zix_calloc(allocator, (size_t)size + 1U, 1U); + TCHAR* const out = + (TCHAR*)zix_calloc(allocator, (size_t)size + 1U, sizeof(TCHAR)); if (out) { - ExpandEnvironmentStrings(string, out, size + 1U); + ExpandEnvironmentStrings(wstring, out, size + 1U); } + + arg_path_free(allocator, wstring); + +#ifdef UNICODE + char* const result = zix_wchar_to_utf8(allocator, out); + zix_free(allocator, out); + return result; +#else return out; +#endif } -- cgit v1.2.1