Jacek Caban : urlmon: Fix handling of proposed mime.
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(a)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));
participants (1)
-
Alexandre Julliard