[virt-tools-list] [PATCH virt-viewer] fix character encoding on Windows platform
Qiu Wenbo
qiuwenbo at kylinos.com.cn
Mon Oct 15 12:35:34 UTC 2018
Sorry, I don't read the code very carefully. You are right, since the
default command line is parsed by g_option_context_parse_strv
(https://gitlab.gnome.org/GNOME/glib/blob/7c1f38b1c9d97519bf087a37a7d8c0a6e6bfdf18/gio/gapplication.c#L561)
we can use the same code path. I have generated a new patch.
On 2018/10/15 19:54, Christophe Fergeau wrote:
> Hey,
>
> On Mon, Oct 15, 2018 at 07:26:12PM +0800, Qiu Wenbo wrote:
>> Thank you. We can't use the same code path here. The code path of
>> GApplication on Windows is different compared to Linux. To handle different
>> file name encodings on Windows, GApplication will get its command line
>> arguments through g_win32_get_command_line() which will return an arrary of
>> UTF-8 encoded strings. But on Linux, GApplication simply get its command
>> line arguments through argv of the program's main() which is in encoded by
>> current system locale. The only difference between g_option_context_parse()
>> and g_option_context_parse_strv() is how they interpret their arguments. We
>> need use g_option_context_parse_strv on Windows since it accept UTF-8
>> encoded strings. And we should use the original code path to handle system
>> locale encoded strings on Linux.
> Looking at glib's code, on linux, I think we'd be getting locale encoded
> strings with both methods on linux
> ( https://gitlab.gnome.org/GNOME/glib/blob/7c1f38b1c9d97519bf087a37a7d8c0a6e6bfdf18/gio/gapplication.c#L2385
> and
> https://gitlab.gnome.org/GNOME/glib/blob/fba8d7a48ad0f4455461162130c7f2eec9c4e363/glib/goption.c#L2688
> - strv_mode is only used on Windows to convert between locale encoding
> and utf8).
>
> Christophe
-------------- next part --------------
>From f96c6c4bdc9e7d997fb38aeebc74108076d0017c Mon Sep 17 00:00:00 2001
From: Qiu Wenbo <qiuwenbo at kylinos.com.cn>
Date: Mon, 15 Oct 2018 20:23:45 +0800
Subject: [PATCH] win32: fix command line encoding on windows platform
---
configure.ac | 4 ++--
src/virt-viewer-app.c | 3 +--
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/configure.ac b/configure.ac
index 9b52eb4..bfbf27d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -13,8 +13,8 @@ m4_ifndef([AM_SILENT_RULES], [m4_define([AM_SILENT_RULES],[])])
AM_SILENT_RULES([yes])
# Keep these two definitions in agreement.
-GLIB2_REQUIRED="2.38"
-GLIB2_ENCODED_VERSION="GLIB_VERSION_2_38"
+GLIB2_REQUIRED="2.40"
+GLIB2_ENCODED_VERSION="GLIB_VERSION_2_40"
# Keep these two definitions in agreement.
GTK_REQUIRED="3.12"
diff --git a/src/virt-viewer-app.c b/src/virt-viewer-app.c
index 889cc6b..256eea7 100644
--- a/src/virt-viewer-app.c
+++ b/src/virt-viewer-app.c
@@ -1809,7 +1809,6 @@ virt_viewer_app_local_command_line (GApplication *gapp,
{
VirtViewerApp *self = VIRT_VIEWER_APP(gapp);
gboolean ret = FALSE;
- gint argc = g_strv_length(*args);
GError *error = NULL;
GOptionContext *context = g_option_context_new(NULL);
GOptionGroup *group = g_option_group_new("virt-viewer", NULL, NULL, gapp, NULL);
@@ -1828,7 +1827,7 @@ virt_viewer_app_local_command_line (GApplication *gapp,
g_option_context_add_group(context, spice_get_option_group());
#endif
- if (!g_option_context_parse(context, &argc, args, &error)) {
+ if (!g_option_context_parse_strv(context, args, &error)) {
if (error != NULL) {
g_printerr(_("%s\n"), error->message);
g_error_free(error);
--
2.19.0
More information about the virt-tools-list
mailing list