Vincent Povirk : winebrowser: Don't use IUriBuilder with unix file: uri's.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jul 2 15:19:15 CDT 2014


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

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Tue Jul  1 14:09:39 2014 -0500

winebrowser: Don't use IUriBuilder with unix file: uri's.

---

 programs/winebrowser/main.c | 39 ++++++++++++---------------------------
 1 file changed, 12 insertions(+), 27 deletions(-)

diff --git a/programs/winebrowser/main.c b/programs/winebrowser/main.c
index 6938e1e..cb9ea73 100644
--- a/programs/winebrowser/main.c
+++ b/programs/winebrowser/main.c
@@ -311,11 +311,12 @@ done:
 
 static WCHAR *encode_unix_path(const char *src)
 {
-    int len = 1;
     const char *tmp_src;
     WCHAR *dst, *tmp_dst;
     const char safe_chars[] = "/-_.~@&=+$,:";
     const char hex_digits[] = "0123456789ABCDEF";
+    const WCHAR schema[] = {'f','i','l','e',':','/','/',0};
+    int len = sizeof(schema)/sizeof(schema[0]);
 
     tmp_src = src;
 
@@ -336,8 +337,10 @@ static WCHAR *encode_unix_path(const char *src)
     if (!dst)
         return NULL;
 
+    strcpyW(dst, schema);
+
     tmp_src = src;
-    tmp_dst = dst;
+    tmp_dst = dst + strlenW(dst);
 
     while (*tmp_src != 0)
     {
@@ -362,15 +365,13 @@ static WCHAR *encode_unix_path(const char *src)
     return dst;
 }
 
-static IUri *convert_file_uri(IUri *uri)
+static WCHAR *convert_file_uri(IUri *uri)
 {
     wine_get_unix_file_name_t wine_get_unix_file_name_ptr;
-    IUriBuilder *uri_builder;
     struct stat dummy;
     WCHAR *new_path;
     char *unixpath;
     BSTR filename;
-    IUri *new_uri;
     HRESULT hres;
 
     /* check if the argument is a local file */
@@ -399,19 +400,7 @@ static IUri *convert_file_uri(IUri *uri)
 
     WINE_TRACE("New path: %s\n", wine_dbgstr_w(new_path));
 
-    hres = CreateIUriBuilder(uri, 0, 0, &uri_builder);
-    if(SUCCEEDED(hres) && new_path)
-        hres = IUriBuilder_SetPath(uri_builder, new_path);
-    HeapFree(GetProcessHeap(), 0, new_path);
-    if(FAILED(hres))
-        return NULL;
-
-    hres = IUriBuilder_CreateUri(uri_builder, 0, 0, 0, &new_uri);
-    IUriBuilder_Release(uri_builder);
-    if(FAILED(hres))
-        return NULL;
-
-    return new_uri;
+    return new_path;
 }
 
 /*****************************************************************************
@@ -423,7 +412,7 @@ int wmain(int argc, WCHAR *argv[])
     static const WCHAR nohomeW[] = {'-','n','o','h','o','m','e',0};
 
     WCHAR *url = argv[1];
-    BSTR display_uri;
+    BSTR display_uri = NULL;
     DWORD scheme;
     IUri *uri;
     HRESULT hres;
@@ -451,18 +440,14 @@ int wmain(int argc, WCHAR *argv[])
     IUri_GetScheme(uri, &scheme);
 
     if(scheme == URL_SCHEME_FILE) {
-        IUri *file_uri;
-
-        file_uri = convert_file_uri(uri);
-        if(file_uri) {
-            IUri_Release(uri);
-            uri = file_uri;
-        }else {
+        display_uri = convert_file_uri(uri);
+        if(!display_uri) {
             WINE_ERR("Failed to convert file URL to unix path\n");
         }
     }
 
-    hres = IUri_GetDisplayUri(uri, &display_uri);
+    if (!display_uri)
+        hres = IUri_GetDisplayUri(uri, &display_uri);
     IUri_Release(uri);
     if(FAILED(hres))
         return -1;




More information about the wine-cvs mailing list