Module: wine Branch: master Commit: 451a8a6dd00ba57f89b695ead49f2d6bb10ffcc5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=451a8a6dd00ba57f89b695ead4...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Feb 7 17:27:35 2007 +0100
urlmon: Set BINDF_NEEDFILE flag for all not urlmon protocols.
---
dlls/urlmon/binding.c | 41 ++++++++++++++++++++++++++++++++++++----- 1 files changed, 36 insertions(+), 5 deletions(-)
diff --git a/dlls/urlmon/binding.c b/dlls/urlmon/binding.c index edf3bd2..bba7af4 100644 --- a/dlls/urlmon/binding.c +++ b/dlls/urlmon/binding.c @@ -1089,14 +1089,46 @@ static HRESULT get_protocol(Binding *Thi return hres; }
+static BOOL is_urlmon_protocol(LPCWSTR url) +{ + static const WCHAR wszCdl[] = {'c','d','l'}; + static const WCHAR wszFile[] = {'f','i','l','e'}; + static const WCHAR wszFtp[] = {'f','t','p'}; + static const WCHAR wszGopher[] = {'g','o','p','h','e','r'}; + static const WCHAR wszHttp[] = {'h','t','t','p'}; + static const WCHAR wszHttps[] = {'h','t','t','p','s'}; + static const WCHAR wszMk[] = {'m','k'}; + + static const struct { + LPCWSTR scheme; + int len; + } protocol_list[] = { + {wszCdl, sizeof(wszCdl) /sizeof(WCHAR)}, + {wszFile, sizeof(wszFile) /sizeof(WCHAR)}, + {wszFtp, sizeof(wszFtp) /sizeof(WCHAR)}, + {wszGopher, sizeof(wszGopher)/sizeof(WCHAR)}, + {wszHttp, sizeof(wszHttp) /sizeof(WCHAR)}, + {wszHttps, sizeof(wszHttps) /sizeof(WCHAR)}, + {wszMk, sizeof(wszMk) /sizeof(WCHAR)} + }; + + int i, len = strlenW(url); + + for(i=0; i < sizeof(protocol_list)/sizeof(protocol_list[0]); i++) { + if(len >= protocol_list[i].len + && !memcmp(url, protocol_list[i].scheme, protocol_list[i].len*sizeof(WCHAR))) + return TRUE; + } + + return FALSE; +} + static HRESULT Binding_Create(LPCWSTR url, IBindCtx *pbc, REFIID riid, Binding **binding) { Binding *ret; int len; HRESULT hres;
- static const WCHAR wszFile[] = {'f','i','l','e',':'}; - if(!IsEqualGUID(&IID_IStream, riid)) { FIXME("Unsupported riid %s\n", debugstr_guid(riid)); return E_NOTIMPL; @@ -1159,11 +1191,10 @@ static HRESULT Binding_Create(LPCWSTR ur
ret->bindf |= BINDF_FROMURLMON;
- len = strlenW(url)+1; - - if(len < sizeof(wszFile)/sizeof(WCHAR) || memcmp(wszFile, url, sizeof(wszFile))) + if(!is_urlmon_protocol(url)) ret->bindf |= BINDF_NEEDFILE;
+ len = strlenW(url)+1; ret->url = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)); memcpy(ret->url, url, len*sizeof(WCHAR));