Module: wine Branch: refs/heads/master Commit: c73c3362c6a28ccf3d81b1cec4b942d78babc22c URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=c73c3362c6a28ccf3d81b1ce...
Author: Jacek Caban jacek@codeweavers.com Date: Tue May 30 20:05:31 2006 +0200
urlmon: Use filters mechanism in FindMimeFromData.
---
dlls/urlmon/urlmon_main.c | 43 +++++++++++++++++++++++++++++++++---------- 1 files changed, 33 insertions(+), 10 deletions(-)
diff --git a/dlls/urlmon/urlmon_main.c b/dlls/urlmon/urlmon_main.c index 0cd57bc..1c6bde5 100644 --- a/dlls/urlmon/urlmon_main.c +++ b/dlls/urlmon/urlmon_main.c @@ -397,6 +397,23 @@ void WINAPI ReleaseBindInfo(BINDINFO* pb * * Determines the Multipurpose Internet Mail Extensions (MIME) type from the data provided. */ +static BOOL text_plain_filter(LPVOID buf, DWORD size) +{ + UCHAR *ptr; + + for(ptr = buf; ptr < (UCHAR*)buf+size-1; ptr++) { + if(*ptr < 0x20 && *ptr != '\n' && *ptr != '\r' && *ptr != '\t') + return FALSE; + } + + return TRUE; +} + +static BOOL application_octet_stream_filter(LPVOID buf, DWORD size) +{ + return TRUE; +} + HRESULT WINAPI FindMimeFromData(LPBC pBC, LPCWSTR pwzUrl, LPVOID pBuffer, DWORD cbSize, LPCWSTR pwzMimeProposed, DWORD dwMimeFlags, LPWSTR* ppwzMimeOut, DWORD dwReserved) @@ -427,23 +444,29 @@ HRESULT WINAPI FindMimeFromData(LPBC pBC }
if(pBuffer) { - UCHAR *ptr = pBuffer; DWORD len; - LPCWSTR ret; + LPCWSTR ret = NULL; + int i = 0;
- static const WCHAR wszAppOctetStream[] = {'a','p','p','l','i','c','a','t','i','o','n','/', - 'o','c','t','e','t','-','s','t','r','e','a','m','\0'}; static const WCHAR wszTextPlain[] = {'t','e','x','t','/','p','l','a','i','n','\0'}; + static const WCHAR wszAppOctetStream[] = {'a','p','p','l','i','c','a','t','i','o','n','/', + 'o','c','t','e','t','-','s','t','r','e','a','m','\0'}; + + static const struct { + LPCWSTR mime; + BOOL (*filter)(LPVOID,DWORD); + } mime_filters[] = { + {wszTextPlain, text_plain_filter}, + {wszAppOctetStream, application_octet_stream_filter} + };
if(!cbSize) return E_FAIL;
- ret = wszTextPlain; - for(ptr = pBuffer; ptr < (UCHAR*)pBuffer+cbSize-1; ptr++) { - if(*ptr < 0x20 && *ptr != '\n' && *ptr != '\r' && *ptr != '\t') { - ret = wszAppOctetStream; - break; - } + while(!ret) { + if(mime_filters[i].filter(pBuffer, cbSize)) + ret = mime_filters[i].mime; + i++; }
len = strlenW(ret)+1;