Jacek Caban : urlmon: Use filters mechanism in FindMimeFromData.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed May 31 05:31:32 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: c73c3362c6a28ccf3d81b1cec4b942d78babc22c
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=c73c3362c6a28ccf3d81b1cec4b942d78babc22c
Author: Jacek Caban <jacek at 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;
More information about the wine-cvs
mailing list