Jacek Caban : mshtml: Always use UTF-8 encoding in nsWineURL.

Alexandre Julliard julliard at winehq.org
Wed Nov 21 14:45:16 CST 2012


Module: wine
Branch: master
Commit: d202daa1829f60bc5c05a8c4cf8a2ad57e7eb792
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=d202daa1829f60bc5c05a8c4cf8a2ad57e7eb792

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Nov 21 15:06:34 2012 +0100

mshtml: Always use UTF-8 encoding in nsWineURL.

---

 dlls/mshtml/mshtml_private.h |   30 ++++++++++++++++++++++++++++++
 dlls/mshtml/nsio.c           |   34 +++++++++++++++++-----------------
 2 files changed, 47 insertions(+), 17 deletions(-)

diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index f9c05f0..d2c7b28 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -1102,6 +1102,36 @@ static inline char *heap_strdupWtoA(LPCWSTR str)
     return ret;
 }
 
+static inline WCHAR *heap_strdupUtoW(const char *str)
+{
+    WCHAR *ret = NULL;
+
+    if(str) {
+        size_t len;
+
+        len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
+        ret = heap_alloc(len*sizeof(WCHAR));
+        if(ret)
+            MultiByteToWideChar(CP_UTF8, 0, str, -1, ret, len);
+    }
+
+    return ret;
+}
+
+static inline char *heap_strdupWtoU(const WCHAR *str)
+{
+    char *ret = NULL;
+
+    if(str) {
+        size_t size = WideCharToMultiByte(CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL);
+        ret = heap_alloc(size);
+        if(ret)
+            WideCharToMultiByte(CP_UTF8, 0, str, -1, ret, size, NULL, NULL);
+    }
+
+    return ret;
+}
+
 static inline void windowref_addref(windowref_t *ref)
 {
     InterlockedIncrement(&ref->ref);
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 90543df..e3520d1 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -162,12 +162,12 @@ static nsresult return_wstr_nsacstr(nsACString *ret_str, const WCHAR *str, int l
         return NS_OK;
     }
 
-    lena = WideCharToMultiByte(CP_ACP, 0, str, len, NULL, 0, NULL, NULL);
+    lena = WideCharToMultiByte(CP_UTF8, 0, str, len, NULL, 0, NULL, NULL);
     stra = heap_alloc(lena+1);
     if(!stra)
         return NS_ERROR_OUT_OF_MEMORY;
 
-    WideCharToMultiByte(CP_ACP, 0, str, len, stra, lena, NULL, NULL);
+    WideCharToMultiByte(CP_UTF8, 0, str, len, stra, lena, NULL, NULL);
     stra[lena] = 0;
 
     nsACString_SetData(ret_str, stra);
@@ -1769,7 +1769,7 @@ static nsresult get_uri_string(nsWineURI *This, Uri_PROPERTY prop, nsACString *r
         return NS_ERROR_UNEXPECTED;
     }
 
-    vala = heap_strdupWtoA(val);
+    vala = heap_strdupWtoU(val);
     SysFreeString(val);
     if(!vala)
         return NS_ERROR_OUT_OF_MEMORY;
@@ -1876,7 +1876,7 @@ static nsresult NSAPI nsURI_SetSpec(nsIFileURL *iface, const nsACString *aSpec)
         return NS_ERROR_UNEXPECTED;
 
     nsACString_GetData(aSpec, &speca);
-    spec = heap_strdupAtoW(speca);
+    spec = heap_strdupUtoW(speca);
     if(!spec)
         return NS_ERROR_OUT_OF_MEMORY;
 
@@ -1942,7 +1942,7 @@ static nsresult NSAPI nsURI_SetScheme(nsIFileURL *iface, const nsACString *aSche
         return NS_ERROR_UNEXPECTED;
 
     nsACString_GetData(aScheme, &schemea);
-    scheme = heap_strdupAtoW(schemea);
+    scheme = heap_strdupUtoW(schemea);
     if(!scheme)
         return NS_ERROR_OUT_OF_MEMORY;
 
@@ -2002,7 +2002,7 @@ static nsresult NSAPI nsURI_SetUserPass(nsIFileURL *iface, const nsACString *aUs
     if(*user_pass) {
         WCHAR *ptr;
 
-        buf = heap_strdupAtoW(user_pass);
+        buf = heap_strdupUtoW(user_pass);
         if(!buf)
             return NS_ERROR_OUT_OF_MEMORY;
 
@@ -2049,7 +2049,7 @@ static nsresult NSAPI nsURI_SetUsername(nsIFileURL *iface, const nsACString *aUs
         return NS_ERROR_UNEXPECTED;
 
     nsACString_GetData(aUsername, &usera);
-    user = heap_strdupAtoW(usera);
+    user = heap_strdupUtoW(usera);
     if(!user)
         return NS_ERROR_OUT_OF_MEMORY;
 
@@ -2083,7 +2083,7 @@ static nsresult NSAPI nsURI_SetPassword(nsIFileURL *iface, const nsACString *aPa
         return NS_ERROR_UNEXPECTED;
 
     nsACString_GetData(aPassword, &passa);
-    pass = heap_strdupAtoW(passa);
+    pass = heap_strdupUtoW(passa);
     if(!pass)
         return NS_ERROR_OUT_OF_MEMORY;
 
@@ -2118,7 +2118,7 @@ static nsresult NSAPI nsURI_GetHostPort(nsIFileURL *iface, nsACString *aHostPort
     if(!ptr)
         ptr = val;
 
-    vala = heap_strdupWtoA(ptr);
+    vala = heap_strdupWtoU(ptr);
     SysFreeString(val);
     if(!vala)
         return NS_ERROR_OUT_OF_MEMORY;
@@ -2161,7 +2161,7 @@ static nsresult NSAPI nsURI_SetHost(nsIFileURL *iface, const nsACString *aHost)
         return NS_ERROR_UNEXPECTED;
 
     nsACString_GetData(aHost, &hosta);
-    host = heap_strdupAtoW(hosta);
+    host = heap_strdupUtoW(hosta);
     if(!host)
         return NS_ERROR_OUT_OF_MEMORY;
 
@@ -2230,7 +2230,7 @@ static nsresult NSAPI nsURI_SetPath(nsIFileURL *iface, const nsACString *aPath)
         return NS_ERROR_UNEXPECTED;
 
     nsACString_GetData(aPath, &patha);
-    path = heap_strdupAtoW(patha);
+    path = heap_strdupUtoW(patha);
     if(!path)
         return NS_ERROR_OUT_OF_MEMORY;
 
@@ -2292,7 +2292,7 @@ static nsresult NSAPI nsURI_SchemeIs(nsIFileURL *iface, const char *scheme, cpp_
     if(FAILED(hres))
         return NS_ERROR_UNEXPECTED;
 
-    MultiByteToWideChar(CP_ACP, 0, scheme, -1, buf, sizeof(buf)/sizeof(WCHAR));
+    MultiByteToWideChar(CP_UTF8, 0, scheme, -1, buf, sizeof(buf)/sizeof(WCHAR));
     *_retval = !strcmpW(scheme_name, buf);
     SysFreeString(scheme_name);
     return NS_OK;
@@ -2336,7 +2336,7 @@ static nsresult NSAPI nsURI_Resolve(nsIFileURL *iface, const nsACString *aRelati
         return NS_ERROR_UNEXPECTED;
 
     nsACString_GetData(aRelativePath, &patha);
-    path = heap_strdupAtoW(patha);
+    path = heap_strdupUtoW(patha);
     if(!path)
         return NS_ERROR_OUT_OF_MEMORY;
 
@@ -2352,7 +2352,7 @@ static nsresult NSAPI nsURI_Resolve(nsIFileURL *iface, const nsACString *aRelati
     if(FAILED(hres))
         return NS_ERROR_FAILURE;
 
-    reta = heap_strdupWtoA(ret);
+    reta = heap_strdupWtoU(ret);
     SysFreeString(ret);
     if(!reta)
         return NS_ERROR_OUT_OF_MEMORY;
@@ -2404,7 +2404,7 @@ static nsresult NSAPI nsURL_GetRef(nsIFileURL *iface, nsACString *aRef)
     if(FAILED(hres))
         return NS_ERROR_UNEXPECTED;
 
-    refa = heap_strdupWtoA(ref);
+    refa = heap_strdupWtoU(ref);
     SysFreeString(ref);
     if(ref && !refa)
         return NS_ERROR_OUT_OF_MEMORY;
@@ -2427,7 +2427,7 @@ static nsresult NSAPI nsURL_SetRef(nsIFileURL *iface, const nsACString *aRef)
         return NS_ERROR_UNEXPECTED;
 
     nsACString_GetData(aRef, &refa);
-    ref = heap_strdupAtoW(refa);
+    ref = heap_strdupUtoW(refa);
     if(!ref)
         return NS_ERROR_OUT_OF_MEMORY;
 
@@ -2563,7 +2563,7 @@ static nsresult NSAPI nsURL_SetQuery(nsIFileURL *iface, const nsACString *aQuery
         return NS_ERROR_UNEXPECTED;
 
     nsACString_GetData(aQuery, &querya);
-    query = heap_strdupAtoW(querya);
+    query = heap_strdupUtoW(querya);
     if(!query)
         return NS_ERROR_OUT_OF_MEMORY;
 




More information about the wine-cvs mailing list