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