Jacek Caban : urlmon: Use find_mime_from_ext directly in file protocol handler.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Dec 23 15:21:00 CST 2014


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Dec 23 12:02:12 2014 +0100

urlmon: Use find_mime_from_ext directly in file protocol handler.

---

 dlls/urlmon/file.c        | 24 +++++++++++++-----------
 dlls/urlmon/mimefilter.c  |  2 +-
 dlls/urlmon/urlmon_main.h |  2 ++
 3 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/dlls/urlmon/file.c b/dlls/urlmon/file.c
index d426f19..80d9dd6 100644
--- a/dlls/urlmon/file.c
+++ b/dlls/urlmon/file.c
@@ -251,7 +251,7 @@ static HRESULT WINAPI FileProtocol_StartEx(IInternetProtocolEx *iface, IUri *pUr
     DWORD scheme, size;
     LPWSTR mime = NULL;
     WCHAR null_char = 0;
-    BSTR url;
+    BSTR ext;
     HRESULT hres;
 
     TRACE("(%p)->(%p %p %p %08x %p)\n", This, pUri, pOIProtSink,
@@ -300,17 +300,19 @@ static HRESULT WINAPI FileProtocol_StartEx(IInternetProtocolEx *iface, IUri *pUr
     if(FAILED(hres))
         return hres;
 
-    hres = IUri_GetDisplayUri(pUri, &url);
-    if(hres == S_OK) {
-        hres = FindMimeFromData(NULL, url, NULL, 0, NULL, 0, &mime, 0);
-        SysFreeString(url);
-        if(SUCCEEDED(hres)) {
-            IInternetProtocolSink_ReportProgress(pOIProtSink,
-                    (grfBINDF & BINDF_FROMURLMON) ?
-                     BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE : BINDSTATUS_MIMETYPEAVAILABLE,
-                    mime);
-            CoTaskMemFree(mime);
+    hres = IUri_GetExtension(pUri, &ext);
+    if(SUCCEEDED(hres)) {
+        if(hres == S_OK && *ext) {
+            hres = find_mime_from_ext(ext, &mime);
+            if(SUCCEEDED(hres)) {
+                IInternetProtocolSink_ReportProgress(pOIProtSink,
+                        (grfBINDF & BINDF_FROMURLMON) ?
+                        BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE : BINDSTATUS_MIMETYPEAVAILABLE,
+                        mime);
+                CoTaskMemFree(mime);
+            }
         }
+        SysFreeString(ext);
     }
 
     IInternetProtocolSink_ReportData(pOIProtSink,
diff --git a/dlls/urlmon/mimefilter.c b/dlls/urlmon/mimefilter.c
index 1e06fc3..cee1a19 100644
--- a/dlls/urlmon/mimefilter.c
+++ b/dlls/urlmon/mimefilter.c
@@ -422,7 +422,7 @@ static BOOL application_octet_stream_filter(const BYTE *b, DWORD size)
     return TRUE;
 }
 
-static HRESULT find_mime_from_ext(const WCHAR *ext, WCHAR **ret)
+HRESULT find_mime_from_ext(const WCHAR *ext, WCHAR **ret)
 {
     DWORD res, size;
     WCHAR mime[64];
diff --git a/dlls/urlmon/urlmon_main.h b/dlls/urlmon/urlmon_main.h
index e134761..12be0ed 100644
--- a/dlls/urlmon/urlmon_main.h
+++ b/dlls/urlmon/urlmon_main.h
@@ -76,6 +76,8 @@ WCHAR *get_useragent(void) DECLSPEC_HIDDEN;
 void update_user_agent(WCHAR*) DECLSPEC_HIDDEN;
 void free_session(void) DECLSPEC_HIDDEN;
 
+HRESULT find_mime_from_ext(const WCHAR*,WCHAR**) DECLSPEC_HIDDEN;
+
 HRESULT bind_to_storage(IUri*,IBindCtx*,REFIID,void**) DECLSPEC_HIDDEN;
 HRESULT bind_to_object(IMoniker*,IUri*,IBindCtx*,REFIID,void**ppv) DECLSPEC_HIDDEN;
 




More information about the wine-cvs mailing list