Module: wine Branch: refs/heads/master Commit: ae9e41c639591f2ef7242f6f66a79ae3d40876c8 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=ae9e41c639591f2ef7242f6f...
Author: Jacek Caban jacek@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));