[Spice-devel] [PATCH] [vd_agent] fix bug: display error when dragging file with CJK characters in name

Cody Chan int64ago at gmail.com
Tue Aug 12 03:52:00 PDT 2014


​
I submitted a patch several months ago about this issue,
here
http://lists.freedesktop.org/archives/spice-devel/2014-February/016158.html

I check it again, and find that the value of
g_key_file_to_data(keyfile,...) is always utf-8,
for the value of g_uri_list_extract_uris() is utf8 urlencode.

So the display problem is caused by vd_agent, but how it displays depends
on the
language of system, the following two screenshots show the difference:
http://int64ago-tmp.qiniudn.com/guest-Chinese.png
http://int64ago-tmp.qiniudn.com/guest-English.png

​
---
 vdagent/file_xfer.cpp | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/vdagent/file_xfer.cpp b/vdagent/file_xfer.cpp
index e402eb2..96b7394 100644
--- a/vdagent/file_xfer.cpp
+++ b/vdagent/file_xfer.cpp
@@ -46,6 +46,7 @@ void FileXfer::handle_start(VDAgentFileXferStartMessage*
start,
     uint64_t file_size;
     HANDLE handle;
     AsUser as_user;
+    int wlen;

     status->id = start->id;
     status->result = VD_AGENT_FILE_XFER_STATUS_ERROR;
@@ -81,7 +82,20 @@ void FileXfer::handle_start(VDAgentFileXferStartMessage*
start,

     strcat(file_path, "\\");
     strcat(file_path, file_name);
-    handle = CreateFileA(file_path, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0,
NULL);
+    if((wlen = MultiByteToWideChar(CP_UTF8, 0, file_path, -1, NULL, 0)) ==
0){
+        vd_printf("failed getting WideChar length of %s", file_path);
+        return;
+    }
+    TCHAR *wfile_path = new TCHAR[wlen];
+    if (MultiByteToWideChar(CP_UTF8, 0, file_path, -1, wfile_path, wlen)
== 0){
+        vd_printf("failed converting file_path:%s to WindChar", file_path);
+        if (wfile_path)
+            delete[] wfile_path;
+        return;
+    }
+    handle = CreateFile(wfile_path, GENERIC_WRITE, 0, NULL, CREATE_NEW, 0,
NULL);
+    if (wfile_path)
+        delete[] wfile_path;
     if (handle == INVALID_HANDLE_VALUE) {
         vd_printf("failed creating %s %lu", file_path, GetLastError());
         return;
--
1.9.3

-- 
QSBDT0RFUiBGUk9NIFJJRVNUIE9GIENUU0VV
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20140812/31659998/attachment.html>


More information about the Spice-devel mailing list