gallium/os: call "ANSI" version of GetCommandLine
authorErik Faye-Lund <erik.faye-lund@collabora.com>
Mon, 1 Jun 2020 15:23:46 +0000 (17:23 +0200)
committerMarge Bot <eric+marge@anholt.net>
Sat, 20 Jun 2020 06:51:54 +0000 (06:51 +0000)
The GetCommandLine API comes in two versions, GetCommandLineA (which
returns "ANSI" results), and GetCommandLineW which returns UTF-16
("WIDE") results. Then finally, windows.h provides a wrapper-macro that
defines GetCommandLine to either of the two, based on the setting of
the UNICODE macro.

More information about this mechanism can be found here:
https://docs.microsoft.com/en-us/windows/win32/intl/unicode-in-the-windows-api

For some reason, the UNICODE macro is set during build, even if we're
not explicitly setting it. This leads to us trying to cast a UTF-16
result to a char-pointer, which is obviously not going to do the right
thing.

So let's be defensive, and just call GetCommandLineA directly instead.
This avoids us depending on the setting of the UNICODE-macro in the
first place.

Acked-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5497>

src/gallium/auxiliary/os/os_process.c

index a2c859b78b3d49520219c4598dd59fa6931820d2..f2721a0fb529a865359dca20a2a1c142158b6441 100644 (file)
@@ -113,7 +113,7 @@ boolean
 os_get_command_line(char *cmdline, size_t size)
 {
 #if defined(PIPE_OS_WINDOWS)
-   const char *args = GetCommandLine();
+   const char *args = GetCommandLineA();
    if (args) {
       strncpy(cmdline, args, size);
       // make sure we terminate the string