From 69985913b89bba530dadffb4ada0f9eb645b97de Mon Sep 17 00:00:00 2001 From: deepend Date: Thu, 26 Feb 2026 13:35:09 -0700 Subject: [PATCH] =?UTF-8?q?win32=20argv:=20stop=20trusting=20GLib,=20add?= =?UTF-8?q?=20=E2=80=9Czoitechat=E2=80=9D=20lifesaver?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/zoitechat.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/common/zoitechat.c b/src/common/zoitechat.c index ccd5fe6a..c121fbe8 100644 --- a/src/common/zoitechat.c +++ b/src/common/zoitechat.c @@ -1855,6 +1855,7 @@ main (int argc, char *argv[]) int ret; #ifdef WIN32 char **win32_argv = NULL; + int win32_argc; #endif #ifdef WIN32 @@ -1864,14 +1865,19 @@ main (int argc, char *argv[]) srand ((unsigned int) time (NULL)); /* CL: do this only once! */ #ifdef WIN32 - /* Build argv from the Unicode command line first. In subsystem:windows - * launches (for example protocol handlers), CRT argv can be invalid and can - * crash GLib option parsing during startup. */ win32_argv = g_win32_get_command_line (); - if (win32_argv != NULL && win32_argv[0] != NULL) + if (win32_argv != NULL) { + win32_argc = g_strv_length (win32_argv); + if (win32_argc == 0 || win32_argv[0] == NULL || win32_argv[0][0] == '\0') + { + g_strfreev (win32_argv); + win32_argv = g_new0 (char *, 2); + win32_argv[0] = g_strdup ("zoitechat"); + win32_argc = 1; + } argv = win32_argv; - argc = g_strv_length (win32_argv); + argc = win32_argc; } #endif