diff options
author | Daniyar Tleulin <d_tleulin@gamma.kz> | 2023-05-23 16:49:21 +0600 |
---|---|---|
committer | Philip Withnall <pwithnall@endlessos.org> | 2023-05-23 18:21:29 +0100 |
commit | 6c6a844a508f6df1966aa849e8a1cd07625f83f5 (patch) | |
tree | 2848c6dbdbd92b322d36c63f9f1e389c107b9031 | |
parent | 7e41ac18da126981ff1811c051e198cb4cb13423 (diff) | |
download | glib-6c6a844a508f6df1966aa849e8a1cd07625f83f5.tar.gz |
glib-compile-schemas: Fix non-ASCII arg parsing on Windows
When the source directory contains non-ASCII symbols,
argument parsing previously failed on MINGW64.
Fixes: #3003
-rw-r--r-- | gio/glib-compile-schemas.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c index efe6f8e77..04ef40457 100644 --- a/gio/glib-compile-schemas.c +++ b/gio/glib-compile-schemas.c @@ -22,6 +22,7 @@ /* Prologue {{{1 */ #include "config.h" +#include <glib.h> #include <gstdio.h> #include <gi18n.h> @@ -2182,6 +2183,7 @@ main (int argc, char **argv) #ifdef G_OS_WIN32 gchar *tmp = NULL; + gchar **command_line = NULL; #endif setlocale (LC_ALL, GLIB_DEFAULT_LOCALE); @@ -2206,12 +2208,23 @@ main (int argc, char **argv) "and the cache file is called gschemas.compiled.")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); +#ifdef G_OS_WIN32 + command_line = g_win32_get_command_line (); + if (!g_option_context_parse_strv (context, &command_line, &error)) + { + fprintf (stderr, "%s\n", error->message); + retval = 1; + goto done; + } + argc = g_strv_length (command_line); +#else if (!g_option_context_parse (context, &argc, &argv, &error)) { fprintf (stderr, "%s\n", error->message); retval = 1; goto done; } +#endif if (show_version_and_exit) { @@ -2227,7 +2240,11 @@ main (int argc, char **argv) goto done; } +#ifdef G_OS_WIN32 + srcdir = command_line[1]; +#else srcdir = argv[1]; +#endif target = g_build_filename (targetdir ? targetdir : srcdir, "gschemas.compiled", NULL); @@ -2320,6 +2337,7 @@ done: #ifdef G_OS_WIN32 g_free (tmp); + g_strfreev (command_line); #endif return retval; |