Re: [PATCH virt-viewer] fix character encoding on Windows platform

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
>From f96c6c4bdc9e7d997fb38aeebc74108076d0017c Mon Sep 17 00:00:00 2001
From: Qiu Wenbo <qiuwenbo@xxxxxxxxxxxxxx>
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

_______________________________________________
virt-tools-list mailing list
virt-tools-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/virt-tools-list

[Index of Archives]     [Linux Virtualization]     [KVM Development]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux