Jacek Caban : urlmon: Fix handling of proposed mime.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jul 7 07:56:08 CDT 2006


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jul  6 20:02:49 2006 +0200

urlmon: Fix handling of proposed mime.

---

 dlls/urlmon/urlmon_main.c |   29 +++++++++++++++++++++++++++--
 1 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/dlls/urlmon/urlmon_main.c b/dlls/urlmon/urlmon_main.c
index 99ba81c..2adafe9 100644
--- a/dlls/urlmon/urlmon_main.c
+++ b/dlls/urlmon/urlmon_main.c
@@ -455,7 +455,7 @@ HRESULT WINAPI FindMimeFromData(LPBC pBC
     if(!ppwzMimeOut || (!pwzUrl && !pBuffer))
         return E_INVALIDARG;
 
-    if(pwzMimeProposed && (!pwzUrl || !pBuffer || (pBuffer && !cbSize))) {
+    if(pwzMimeProposed && (!pBuffer || (pBuffer && !cbSize))) {
         DWORD len;
 
         if(!pwzMimeProposed)
@@ -470,7 +470,7 @@ HRESULT WINAPI FindMimeFromData(LPBC pBC
     if(pBuffer) {
         DWORD len;
         LPCWSTR ret = NULL;
-        int i = 0;
+        int i;
 
         static const WCHAR wszTextHtml[] = {'t','e','x','t','/','h','t','m','l',0};
         static const WCHAR wszImagePjpeg[] = {'i','m','a','g','e','/','p','j','p','e','g',0};
@@ -491,12 +491,37 @@ HRESULT WINAPI FindMimeFromData(LPBC pBC
         if(!cbSize)
             return E_FAIL;
 
+        if(pwzMimeProposed && strcmpW(pwzMimeProposed, wszAppOctetStream)) {
+            for(i=0; i < sizeof(mime_filters)/sizeof(*mime_filters); i++) {
+                if(!strcmpW(pwzMimeProposed, mime_filters[i].mime))
+                    break;
+            }
+
+            if(i == sizeof(mime_filters)/sizeof(*mime_filters)
+                    || mime_filters[i].filter(pBuffer, cbSize)) {
+                len = strlenW(pwzMimeProposed)+1;
+                *ppwzMimeOut = CoTaskMemAlloc(len*sizeof(WCHAR));
+                memcpy(*ppwzMimeOut, pwzMimeProposed, len*sizeof(WCHAR));
+                return S_OK;
+            }
+        }
+
+        i=0;
         while(!ret) {
             if(mime_filters[i].filter(pBuffer, cbSize))
                 ret = mime_filters[i].mime;
             i++;
         }
 
+        if(pwzMimeProposed) {
+            if(i == sizeof(mime_filters)/sizeof(*mime_filters))
+                ret = pwzMimeProposed;
+
+            /* text/html is a special case */
+           if(!strcmpW(pwzMimeProposed, wszTextHtml) && !strcmpW(ret, wszTextPlain))
+                ret = wszTextHtml;
+        }
+
         len = strlenW(ret)+1;
         *ppwzMimeOut = CoTaskMemAlloc(len*sizeof(WCHAR));
         memcpy(*ppwzMimeOut, ret, len*sizeof(WCHAR));




More information about the wine-cvs mailing list