summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniyar Tleulin <d_tleulin@gamma.kz>2023-05-23 16:49:21 +0600
committerPhilip Withnall <pwithnall@endlessos.org>2023-05-23 18:21:29 +0100
commit6c6a844a508f6df1966aa849e8a1cd07625f83f5 (patch)
tree2848c6dbdbd92b322d36c63f9f1e389c107b9031
parent7e41ac18da126981ff1811c051e198cb4cb13423 (diff)
downloadglib-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.c18
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;