Author: dchapyshev Date: Sat Mar 7 11:34:55 2009 New Revision: 39900
URL: http://svn.reactos.org/svn/reactos?rev=39900&view=rev Log: - Sync comctl32, cryptui, mlang, msctf, netapi32, ole32, urlmon with Wine head
Added: trunk/reactos/dll/win32/urlmon/gopher.c (with props) Modified: trunk/reactos/dll/win32/comctl32/status.c trunk/reactos/dll/win32/comctl32/treeview.c trunk/reactos/dll/win32/cryptui/main.c trunk/reactos/dll/win32/mlang/mlang.c trunk/reactos/dll/win32/msctf/msctf.c trunk/reactos/dll/win32/netapi32/access.c trunk/reactos/dll/win32/netapi32/nbt.c trunk/reactos/dll/win32/netapi32/netbios.c trunk/reactos/dll/win32/netapi32/wksta.c trunk/reactos/dll/win32/ole32/ole2.c trunk/reactos/dll/win32/urlmon/umon.c trunk/reactos/dll/win32/urlmon/umstream.c trunk/reactos/dll/win32/urlmon/urlmon.rbuild trunk/reactos/dll/win32/urlmon/urlmon_main.c trunk/reactos/dll/win32/urlmon/urlmon_main.h
Modified: trunk/reactos/dll/win32/comctl32/status.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/comctl32/status.c... ============================================================================== --- trunk/reactos/dll/win32/comctl32/status.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/comctl32/status.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -762,6 +762,7 @@ part->text = (LPWSTR)text; } else { LPWSTR ntext; + WCHAR *idx;
if (text && !isW) { LPCSTR atxt = (LPCSTR)text; @@ -774,6 +775,16 @@ if (!ntext) return FALSE; strcpyW (ntext, text); } else ntext = 0; + + /* replace nonprintable characters with spaces */ + if (ntext) { + idx = ntext; + while (*idx) { + if(!isprintW(*idx)) + *idx = ' '; + idx++; + } + }
/* check if text is unchanged -> no need to redraw */ if (text) {
Modified: trunk/reactos/dll/win32/comctl32/treeview.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/comctl32/treeview... ============================================================================== --- trunk/reactos/dll/win32/comctl32/treeview.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/comctl32/treeview.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -2306,11 +2306,13 @@ & (TVS_LINESATROOT|TVS_HASLINES|TVS_HASBUTTONS)) > TVS_LINESATROOT); HBRUSH hbr, hbrOld; + COLORREF clrBk = infoPtr->clrBk == -1 ? GetSysColor(COLOR_WINDOW): + infoPtr->clrBk;
if (!lar && item->iLevel == 0) return;
- hbr = CreateSolidBrush(infoPtr->clrBk); + hbr = CreateSolidBrush(clrBk); hbrOld = SelectObject(hdc, hbr);
centerx = (item->linesOffset + item->stateOffset) / 2; @@ -2423,8 +2425,8 @@ { Rectangle(hdc, centerx - 1, centery - plussize + 1, centerx + 2, centery + plussize); - SetPixel(hdc, centerx - 1, centery, infoPtr->clrBk); - SetPixel(hdc, centerx + 1, centery, infoPtr->clrBk); + SetPixel(hdc, centerx - 1, centery, clrBk); + SetPixel(hdc, centerx + 1, centery, clrBk); } } } @@ -2472,7 +2474,8 @@ } else { - nmcdhdr.clrTextBk = infoPtr->clrBk; + nmcdhdr.clrTextBk = infoPtr->clrBk == -1 ? GetSysColor(COLOR_WINDOW): + infoPtr->clrBk; if ((infoPtr->dwStyle & TVS_TRACKSELECT) && (wineItem == infoPtr->hotItem)) nmcdhdr.clrText = comctl32_color.clrHighlight; else if (infoPtr->clrText == -1) @@ -2782,9 +2785,12 @@ static LRESULT TREEVIEW_EraseBackground(const TREEVIEW_INFO *infoPtr, HDC hDC) { - HBRUSH hBrush = CreateSolidBrush(infoPtr->clrBk); + HBRUSH hBrush; + COLORREF clrBk = infoPtr->clrBk == -1 ? GetSysColor(COLOR_WINDOW): + infoPtr->clrBk; RECT rect;
+ hBrush = CreateSolidBrush(clrBk); GetClientRect(infoPtr->hwnd, &rect); FillRect(hDC, &rect, hBrush); DeleteObject(hBrush); @@ -4942,7 +4948,7 @@
infoPtr->scrollX = 0;
- infoPtr->clrBk = GetSysColor(COLOR_WINDOW); + infoPtr->clrBk = -1; /* use system color */ infoPtr->clrText = -1; /* use system color */ infoPtr->clrLine = RGB(128, 128, 128); infoPtr->clrInsertMark = GetSysColor(COLOR_BTNTEXT);
Modified: trunk/reactos/dll/win32/cryptui/main.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/cryptui/main.c?re... ============================================================================== --- trunk/reactos/dll/win32/cryptui/main.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/cryptui/main.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -3236,8 +3236,7 @@ name = HeapAlloc(GetProcessHeap(), 0, cb); if (name) { - if (!CertGetCertificateContextProperty(cert, prop, (LPBYTE)name, - &cb)) + if (!CertGetCertificateContextProperty(cert, prop, name, &cb)) { HeapFree(GetProcessHeap(), 0, name); name = NULL; @@ -4460,7 +4459,7 @@
if (CryptDecodeObjectEx(X509_ASN_ENCODING, szOID_BASIC_CONSTRAINTS, ext->Value.pbData, ext->Value.cbData, CRYPT_DECODE_ALLOC_FLAG, - NULL, (LPBYTE)&info, &size)) + NULL, &info, &size)) { if (info->SubjectType.cbData == 1) isCA = info->SubjectType.pbData[0] & CERT_CA_SUBJECT_FLAG;
Modified: trunk/reactos/dll/win32/mlang/mlang.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mlang/mlang.c?rev... ============================================================================== --- trunk/reactos/dll/win32/mlang/mlang.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mlang/mlang.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -1495,7 +1495,7 @@
static inline EnumCodePage_impl *impl_from_IEnumCodePage( IEnumCodePage *iface ) { - return (EnumCodePage_impl *)CONTAINING_RECORD( iface, EnumCodePage_impl, vtbl_IEnumCodePage ); + return CONTAINING_RECORD( iface, EnumCodePage_impl, vtbl_IEnumCodePage ); }
static HRESULT WINAPI fnIEnumCodePage_QueryInterface( @@ -1688,7 +1688,7 @@
static inline EnumScript_impl *impl_from_IEnumScript( IEnumScript *iface ) { - return (EnumScript_impl *)CONTAINING_RECORD( iface, EnumScript_impl, vtbl_IEnumScript ); + return CONTAINING_RECORD( iface, EnumScript_impl, vtbl_IEnumScript ); }
static HRESULT WINAPI fnIEnumScript_QueryInterface( @@ -1850,7 +1850,7 @@
static inline MLang_impl *impl_from_IMLangFontLink( IMLangFontLink *iface ) { - return (MLang_impl *)CONTAINING_RECORD( iface, MLang_impl, vtbl_IMLangFontLink ); + return CONTAINING_RECORD( iface, MLang_impl, vtbl_IMLangFontLink ); }
static HRESULT WINAPI fnIMLangFontLink_QueryInterface( @@ -1954,7 +1954,7 @@
TRACE("(%p) Seeking %u\n",This, uCodePage);
- rc = TranslateCharsetInfo((DWORD*)uCodePage, &cs, TCI_SRCCODEPAGE); + rc = TranslateCharsetInfo((DWORD*)(DWORD_PTR)uCodePage, &cs, TCI_SRCCODEPAGE);
if (rc) { @@ -1985,8 +1985,9 @@
*puCodePage = 0x00000000;
- rc = TranslateCharsetInfo((DWORD*)uDefaultCodePage, &cs, TCI_SRCCODEPAGE); - + rc = TranslateCharsetInfo((DWORD*)(DWORD_PTR)uDefaultCodePage, &cs, + TCI_SRCCODEPAGE); + if (rc && (dwCodePages & cs.fs.fsCsb[0])) { TRACE("Found Default Codepage\n"); @@ -2087,7 +2088,7 @@
static inline MLang_impl *impl_from_IMultiLanguage( IMultiLanguage *iface ) { - return (MLang_impl *)CONTAINING_RECORD( iface, MLang_impl, vtbl_IMultiLanguage ); + return CONTAINING_RECORD( iface, MLang_impl, vtbl_IMultiLanguage ); }
static HRESULT WINAPI fnIMultiLanguage_QueryInterface( @@ -2280,7 +2281,7 @@
static inline EnumRfc1766_impl *impl_from_IEnumRfc1766( IEnumRfc1766 *iface ) { - return (EnumRfc1766_impl *)CONTAINING_RECORD( iface, EnumRfc1766_impl, vtbl_IEnumRfc1766 ); + return CONTAINING_RECORD( iface, EnumRfc1766_impl, vtbl_IEnumRfc1766 ); }
static HRESULT WINAPI fnIEnumRfc1766_QueryInterface( @@ -2550,7 +2551,7 @@
static inline MLang_impl *impl_from_IMultiLanguage3( IMultiLanguage3 *iface ) { - return (MLang_impl *)CONTAINING_RECORD( iface, MLang_impl, vtbl_IMultiLanguage3 ); + return CONTAINING_RECORD( iface, MLang_impl, vtbl_IMultiLanguage3 ); }
static HRESULT WINAPI fnIMultiLanguage2_QueryInterface( @@ -2592,7 +2593,8 @@ { CHARSETINFO csi;
- if (TranslateCharsetInfo((DWORD *)ml_data->family_codepage, &csi, TCI_SRCCODEPAGE)) + if (TranslateCharsetInfo((DWORD*)(DWORD_PTR)ml_data->family_codepage, &csi, + TCI_SRCCODEPAGE)) mime_cp_info->bGDICharset = csi.ciCharset; else mime_cp_info->bGDICharset = DEFAULT_CHARSET; @@ -3169,7 +3171,7 @@
static inline MLang_impl *impl_from_IMLangFontLink2( IMLangFontLink2 *iface ) { - return (MLang_impl *)CONTAINING_RECORD( iface, MLang_impl, vtbl_IMLangFontLink2 ); + return CONTAINING_RECORD( iface, MLang_impl, vtbl_IMLangFontLink2 ); }
static HRESULT WINAPI fnIMLangFontLink2_QueryInterface( @@ -3323,7 +3325,7 @@
static inline MLang_impl *impl_from_IMLangLineBreakConsole( IMLangLineBreakConsole *iface ) { - return (MLang_impl *)CONTAINING_RECORD( iface, MLang_impl, vtbl_IMLangLineBreakConsole ); + return CONTAINING_RECORD( iface, MLang_impl, vtbl_IMLangLineBreakConsole ); }
static HRESULT WINAPI fnIMLangLineBreakConsole_QueryInterface(
Modified: trunk/reactos/dll/win32/msctf/msctf.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msctf/msctf.c?rev... ============================================================================== --- trunk/reactos/dll/win32/msctf/msctf.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/msctf/msctf.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -148,7 +148,7 @@ This->vtbl = &ClassFactoryVtbl; This->ref = 1; This->ctor = ctor; - *ppvOut = (LPVOID)This; + *ppvOut = This; TRACE("Created class factory %p\n", This); MSCTF_refCount++; return S_OK; @@ -217,7 +217,7 @@ HRESULT WINAPI TF_GetThreadMgr(ITfThreadMgr **pptim) { TRACE("\n"); - *pptim = (ITfThreadMgr*)TlsGetValue(tlsIndex); + *pptim = TlsGetValue(tlsIndex);
if (*pptim) ITfThreadMgr_AddRef(*pptim);
Modified: trunk/reactos/dll/win32/netapi32/access.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/access.c... ============================================================================== --- trunk/reactos/dll/win32/netapi32/access.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/netapi32/access.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -658,7 +658,7 @@ admin_size - sizeof(NET_DISPLAY_USER) + guest_size - sizeof(NET_DISPLAY_USER), SortedBuffer); - inf = (PNET_DISPLAY_USER) *SortedBuffer; + inf = *SortedBuffer; str = (LPWSTR) ((PBYTE) inf + sizeof(NET_DISPLAY_USER) * records); inf->usri1_name = str; str = (LPWSTR) ( @@ -826,8 +826,7 @@ }
umi = (USER_MODALS_INFO_2 *) *pbuffer; - umi->usrmod2_domain_id = (PSID)(*pbuffer + - sizeof(USER_MODALS_INFO_2)); + umi->usrmod2_domain_id = *pbuffer + sizeof(USER_MODALS_INFO_2); umi->usrmod2_domain_name = (LPWSTR)(*pbuffer + sizeof(USER_MODALS_INFO_2) + GetLengthSid(domainIdentifier));
Modified: trunk/reactos/dll/win32/netapi32/nbt.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/nbt.c?re... ============================================================================== --- trunk/reactos/dll/win32/netapi32/nbt.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/netapi32/nbt.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -400,7 +400,7 @@ static BOOL NetBTFindNameAnswerCallback(void *pVoid, WORD answerCount, WORD answerIndex, PUCHAR rData, WORD rLen) { - NetBTNameQueryData *queryData = (NetBTNameQueryData *)pVoid; + NetBTNameQueryData *queryData = pVoid; BOOL ret;
if (queryData) @@ -696,7 +696,7 @@ static BOOL NetBTNodeStatusAnswerCallback(void *pVoid, WORD answerCount, WORD answerIndex, PUCHAR rData, WORD rLen) { - NetBTNodeQueryData *data = (NetBTNodeQueryData *)pVoid; + NetBTNodeQueryData *data = pVoid;
if (data && !data->gotResponse && rData && rLen >= 1) { @@ -811,7 +811,7 @@
static UCHAR NetBTAstat(void *adapt, PNCB ncb) { - NetBTAdapter *adapter = (NetBTAdapter *)adapt; + NetBTAdapter *adapter = adapt; UCHAR ret;
TRACE("adapt %p, NCB %p\n", adapt, ncb); @@ -856,7 +856,7 @@
static UCHAR NetBTFindName(void *adapt, PNCB ncb) { - NetBTAdapter *adapter = (NetBTAdapter *)adapt; + NetBTAdapter *adapter = adapt; UCHAR ret; const NBNameCacheEntry *cacheEntry = NULL; PFIND_NAME_HEADER foundName; @@ -973,7 +973,7 @@
static UCHAR NetBTCall(void *adapt, PNCB ncb, void **sess) { - NetBTAdapter *adapter = (NetBTAdapter *)adapt; + NetBTAdapter *adapter = adapt; UCHAR ret; const NBNameCacheEntry *cacheEntry = NULL;
@@ -1074,8 +1074,8 @@ */ static UCHAR NetBTSend(void *adapt, void *sess, PNCB ncb) { - NetBTAdapter *adapter = (NetBTAdapter *)adapt; - NetBTSession *session = (NetBTSession *)sess; + NetBTAdapter *adapter = adapt; + NetBTSession *session = sess; UCHAR buffer[NBSS_HDRSIZE], ret; int r; WSABUF wsaBufs[2]; @@ -1123,8 +1123,8 @@
static UCHAR NetBTRecv(void *adapt, void *sess, PNCB ncb) { - NetBTAdapter *adapter = (NetBTAdapter *)adapt; - NetBTSession *session = (NetBTSession *)sess; + NetBTAdapter *adapter = adapt; + NetBTSession *session = sess; UCHAR buffer[NBSS_HDRSIZE], ret; int r; WSABUF wsaBufs[2]; @@ -1231,7 +1231,7 @@
static UCHAR NetBTHangup(void *adapt, void *sess) { - NetBTSession *session = (NetBTSession *)sess; + NetBTSession *session = sess;
TRACE("adapt %p, session %p\n", adapt, session);
@@ -1255,7 +1255,7 @@ TRACE("adapt %p\n", adapt); if (adapt) { - NetBTAdapter *adapter = (NetBTAdapter *)adapt; + NetBTAdapter *adapter = adapt;
if (adapter->nameCache) NBNameCacheDestroy(adapter->nameCache); @@ -1310,7 +1310,7 @@ ULONG transport, const NetBIOSAdapterImpl *data, void *closure) { BOOL ret; - PMIB_IPADDRTABLE table = (PMIB_IPADDRTABLE)closure; + PMIB_IPADDRTABLE table = closure;
if (table && data) { @@ -1319,7 +1319,7 @@ ret = FALSE; for (ndx = 0; !ret && ndx < table->dwNumEntries; ndx++) { - const NetBTAdapter *adapter = (const NetBTAdapter *)data->data; + const NetBTAdapter *adapter = data->data;
if (table->table[ndx].dwIndex == adapter->ipr.dwIndex) {
Modified: trunk/reactos/dll/win32/netapi32/netbios.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/netbios.... ============================================================================== --- trunk/reactos/dll/win32/netapi32/netbios.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/netapi32/netbios.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -762,7 +762,7 @@
static DWORD WINAPI nbCmdThread(LPVOID lpVoid) { - PNCB ncb = (PNCB)lpVoid; + PNCB ncb = lpVoid;
if (ncb) {
Modified: trunk/reactos/dll/win32/netapi32/wksta.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/netapi32/wksta.c?... ============================================================================== --- trunk/reactos/dll/win32/netapi32/wksta.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/netapi32/wksta.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -157,8 +157,7 @@ ULONG transport, const NetBIOSAdapterImpl *data, void *closure) { BOOL ret; - struct WkstaTransportEnumData *enumData = (struct WkstaTransportEnumData *) - closure; + struct WkstaTransportEnumData *enumData = closure;
if (enumData && enumData->pbuf) {
Modified: trunk/reactos/dll/win32/ole32/ole2.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/ole32/ole2.c?rev=... ============================================================================== --- trunk/reactos/dll/win32/ole32/ole2.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/ole32/ole2.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -2642,6 +2642,7 @@ case VT_BSTR: case VT_ERROR: case VT_BOOL: + case VT_DECIMAL: case VT_UI1: case VT_UI2: case VT_UI4: @@ -2712,6 +2713,7 @@ case VT_DATE: case VT_ERROR: case VT_BOOL: + case VT_DECIMAL: case VT_UI1: case VT_UI2: case VT_UI4: @@ -2799,7 +2801,7 @@ ULONG len; HRESULT hr;
- TRACE("(%p, %p)\n", pvarDest, pvarSrc); + TRACE("(%p, %p vt %04x)\n", pvarDest, pvarSrc, pvarSrc->vt);
hr = PROPVARIANT_ValidateType(pvarSrc->vt); if (FAILED(hr)) @@ -2817,6 +2819,7 @@ case VT_I2: case VT_UI2: case VT_BOOL: + case VT_DECIMAL: case VT_I4: case VT_UI4: case VT_R4:
Added: trunk/reactos/dll/win32/urlmon/gopher.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/urlmon/gopher.c?r... ============================================================================== --- trunk/reactos/dll/win32/urlmon/gopher.c (added) +++ trunk/reactos/dll/win32/urlmon/gopher.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -1,0 +1,299 @@ +/* + * Copyright 2009 Jacek Caban for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "urlmon_main.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(urlmon); + +typedef struct { + Protocol base; + + const IInternetProtocolVtbl *lpInternetProtocolVtbl; + const IInternetPriorityVtbl *lpInternetPriorityVtbl; + + LONG ref; +} GopherProtocol; + +#define PROTOCOL(x) ((IInternetProtocol*) &(x)->lpInternetProtocolVtbl) +#define PRIORITY(x) ((IInternetPriority*) &(x)->lpInternetPriorityVtbl) + +#define ASYNCPROTOCOL_THIS(iface) DEFINE_THIS2(GopherProtocol, base, iface) + +static HRESULT GopherProtocol_open_request(Protocol *prot, LPCWSTR url, DWORD request_flags, + IInternetBindInfo *bind_info) +{ + GopherProtocol *This = ASYNCPROTOCOL_THIS(prot); + + This->base.request = InternetOpenUrlW(This->base.internet, url, NULL, 0, + request_flags, (DWORD_PTR)&This->base); + if (!This->base.request && GetLastError() != ERROR_IO_PENDING) { + WARN("InternetOpenUrl failed: %d\n", GetLastError()); + return INET_E_RESOURCE_NOT_FOUND; + } + + return S_OK; +} + +static HRESULT GopherProtocol_start_downloading(Protocol *prot) +{ + return S_OK; +} + +static void GopherProtocol_close_connection(Protocol *prot) +{ +} + +#undef ASYNCPROTOCOL_THIS + +static const ProtocolVtbl AsyncProtocolVtbl = { + GopherProtocol_open_request, + GopherProtocol_start_downloading, + GopherProtocol_close_connection +}; + +#define PROTOCOL_THIS(iface) DEFINE_THIS(GopherProtocol, InternetProtocol, iface) + +static HRESULT WINAPI GopherProtocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + + *ppv = NULL; + if(IsEqualGUID(&IID_IUnknown, riid)) { + TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); + *ppv = PROTOCOL(This); + }else if(IsEqualGUID(&IID_IInternetProtocolRoot, riid)) { + TRACE("(%p)->(IID_IInternetProtocolRoot %p)\n", This, ppv); + *ppv = PROTOCOL(This); + }else if(IsEqualGUID(&IID_IInternetProtocol, riid)) { + TRACE("(%p)->(IID_IInternetProtocol %p)\n", This, ppv); + *ppv = PROTOCOL(This); + }else if(IsEqualGUID(&IID_IInternetPriority, riid)) { + TRACE("(%p)->(IID_IInternetPriority %p)\n", This, ppv); + *ppv = PRIORITY(This); + } + + if(*ppv) { + IInternetProtocol_AddRef(iface); + return S_OK; + } + + WARN("not supported interface %s\n", debugstr_guid(riid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI GopherProtocol_AddRef(IInternetProtocol *iface) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + LONG ref = InterlockedIncrement(&This->ref); + TRACE("(%p) ref=%d\n", This, ref); + return ref; +} + +static ULONG WINAPI GopherProtocol_Release(IInternetProtocol *iface) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if(!ref) { + heap_free(This); + + URLMON_UnlockModule(); + } + + return ref; +} + +static HRESULT WINAPI GopherProtocol_Start(IInternetProtocol *iface, LPCWSTR szUrl, + IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo, + DWORD grfPI, DWORD dwReserved) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + + TRACE("(%p)->(%s %p %p %08x %d)\n", This, debugstr_w(szUrl), pOIProtSink, + pOIBindInfo, grfPI, dwReserved); + + return protocol_start(&This->base, PROTOCOL(This), szUrl, pOIProtSink, pOIBindInfo); +} + +static HRESULT WINAPI GopherProtocol_Continue(IInternetProtocol *iface, PROTOCOLDATA *pProtocolData) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + + TRACE("(%p)->(%p)\n", This, pProtocolData); + + return protocol_continue(&This->base, pProtocolData); +} + +static HRESULT WINAPI GopherProtocol_Abort(IInternetProtocol *iface, HRESULT hrReason, + DWORD dwOptions) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + FIXME("(%p)->(%08x %08x)\n", This, hrReason, dwOptions); + return E_NOTIMPL; +} + +static HRESULT WINAPI GopherProtocol_Terminate(IInternetProtocol *iface, DWORD dwOptions) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + + TRACE("(%p)->(%08x)\n", This, dwOptions); + + protocol_close_connection(&This->base); + return S_OK; +} + +static HRESULT WINAPI GopherProtocol_Suspend(IInternetProtocol *iface) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI GopherProtocol_Resume(IInternetProtocol *iface) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + FIXME("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI GopherProtocol_Read(IInternetProtocol *iface, void *pv, + ULONG cb, ULONG *pcbRead) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + + TRACE("(%p)->(%p %u %p)\n", This, pv, cb, pcbRead); + + return protocol_read(&This->base, pv, cb, pcbRead); +} + +static HRESULT WINAPI GopherProtocol_Seek(IInternetProtocol *iface, LARGE_INTEGER dlibMove, + DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + FIXME("(%p)->(%d %d %p)\n", This, dlibMove.u.LowPart, dwOrigin, plibNewPosition); + return E_NOTIMPL; +} + +static HRESULT WINAPI GopherProtocol_LockRequest(IInternetProtocol *iface, DWORD dwOptions) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + + TRACE("(%p)->(%08x)\n", This, dwOptions); + + return protocol_lock_request(&This->base); +} + +static HRESULT WINAPI GopherProtocol_UnlockRequest(IInternetProtocol *iface) +{ + GopherProtocol *This = PROTOCOL_THIS(iface); + + TRACE("(%p)\n", This); + + return protocol_unlock_request(&This->base); +} + +#undef PROTOCOL_THIS + +static const IInternetProtocolVtbl GopherProtocolVtbl = { + GopherProtocol_QueryInterface, + GopherProtocol_AddRef, + GopherProtocol_Release, + GopherProtocol_Start, + GopherProtocol_Continue, + GopherProtocol_Abort, + GopherProtocol_Terminate, + GopherProtocol_Suspend, + GopherProtocol_Resume, + GopherProtocol_Read, + GopherProtocol_Seek, + GopherProtocol_LockRequest, + GopherProtocol_UnlockRequest +}; + +#define PRIORITY_THIS(iface) DEFINE_THIS(GopherProtocol, InternetPriority, iface) + +static HRESULT WINAPI GopherPriority_QueryInterface(IInternetPriority *iface, REFIID riid, void **ppv) +{ + GopherProtocol *This = PRIORITY_THIS(iface); + return IInternetProtocol_QueryInterface(PROTOCOL(This), riid, ppv); +} + +static ULONG WINAPI GopherPriority_AddRef(IInternetPriority *iface) +{ + GopherProtocol *This = PRIORITY_THIS(iface); + return IInternetProtocol_AddRef(PROTOCOL(This)); +} + +static ULONG WINAPI GopherPriority_Release(IInternetPriority *iface) +{ + GopherProtocol *This = PRIORITY_THIS(iface); + return IInternetProtocol_Release(PROTOCOL(This)); +} + +static HRESULT WINAPI GopherPriority_SetPriority(IInternetPriority *iface, LONG nPriority) +{ + GopherProtocol *This = PRIORITY_THIS(iface); + + TRACE("(%p)->(%d)\n", This, nPriority); + + This->base.priority = nPriority; + return S_OK; +} + +static HRESULT WINAPI GopherPriority_GetPriority(IInternetPriority *iface, LONG *pnPriority) +{ + GopherProtocol *This = PRIORITY_THIS(iface); + + TRACE("(%p)->(%p)\n", This, pnPriority); + + *pnPriority = This->base.priority; + return S_OK; +} + +#undef PRIORITY_THIS + +static const IInternetPriorityVtbl GopherPriorityVtbl = { + GopherPriority_QueryInterface, + GopherPriority_AddRef, + GopherPriority_Release, + GopherPriority_SetPriority, + GopherPriority_GetPriority +}; + +HRESULT GopherProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj) +{ + GopherProtocol *ret; + + TRACE("(%p %p)\n", pUnkOuter, ppobj); + + URLMON_LockModule(); + + ret = heap_alloc_zero(sizeof(GopherProtocol)); + + ret->base.vtbl = &AsyncProtocolVtbl; + ret->lpInternetProtocolVtbl = &GopherProtocolVtbl; + ret->lpInternetPriorityVtbl = &GopherPriorityVtbl; + ret->ref = 1; + + *ppobj = PROTOCOL(ret); + + return S_OK; +}
Propchange: trunk/reactos/dll/win32/urlmon/gopher.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/reactos/dll/win32/urlmon/umon.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/urlmon/umon.c?rev... ============================================================================== --- trunk/reactos/dll/win32/urlmon/umon.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/urlmon/umon.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -33,251 +33,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
-/* native urlmon.dll uses this key, too */ -static WCHAR BSCBHolder[] = { '_','B','S','C','B','_','H','o','l','d','e','r','_',0 }; - -/*static BOOL registered_wndclass = FALSE;*/ - -typedef struct { - const IBindingVtbl *lpVtbl; - - LONG ref; - - LPWSTR URLName; - - HWND hwndCallback; - IBindCtx *pBC; - HINTERNET hinternet, hconnect, hrequest; - HANDLE hCacheFile; - IUMCacheStream *pstrCache; - IBindStatusCallback *pbscb; - DWORD total_read, expected_size; -} Binding; - -static HRESULT WINAPI Binding_QueryInterface(IBinding* iface, REFIID riid, void **ppvObject) -{ - Binding *This = (Binding*)iface; - - TRACE("(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppvObject); - - if((This == NULL) || (ppvObject == NULL)) - return E_INVALIDARG; - - if (IsEqualIID(&IID_IUnknown, riid) || IsEqualIID(&IID_IBinding, riid)) { - *ppvObject = iface; - IBinding_AddRef(iface); - return S_OK; - } - - *ppvObject = NULL; - return E_NOINTERFACE; -} - -static ULONG WINAPI Binding_AddRef(IBinding* iface) -{ - Binding *This = (Binding*)iface; - ULONG ref = InterlockedIncrement(&This->ref); - - TRACE("(%p) ref=%d\n", This, ref); - - return ref; -} - -static ULONG WINAPI Binding_Release(IBinding* iface) -{ - Binding *This = (Binding*)iface; - ULONG ref = InterlockedDecrement(&This->ref); - - TRACE("(%p) ref=%d\n",This, ref); - - if(!ref) { - heap_free(This->URLName); - if (This->hCacheFile) - CloseHandle(This->hCacheFile); - if (This->pstrCache) - { - UMCloseCacheFileStream(This->pstrCache); - IStream_Release((IStream *)This->pstrCache); - } - if (This->pbscb) - IBindStatusCallback_Release(This->pbscb); - - heap_free(This); - - URLMON_UnlockModule(); - } - - return ref; -} - -static HRESULT WINAPI Binding_Abort(IBinding* iface) -{ - Binding *This = (Binding*)iface; - - FIXME("(%p): stub\n", This); - - return E_NOTIMPL; -} - -static HRESULT WINAPI Binding_GetBindResult(IBinding* iface, CLSID* pclsidProtocol, DWORD* pdwResult, LPOLESTR* pszResult, DWORD* pdwReserved) -{ - Binding *This = (Binding*)iface; - - FIXME("(%p)->(%p, %p, %p, %p): stub\n", This, pclsidProtocol, pdwResult, pszResult, pdwReserved); - - return E_NOTIMPL; -} - -static HRESULT WINAPI Binding_GetPriority(IBinding* iface, LONG* pnPriority) -{ - Binding *This = (Binding*)iface; - - FIXME("(%p)->(%p): stub\n", This, pnPriority); - - return E_NOTIMPL; -} - -static HRESULT WINAPI Binding_Resume(IBinding* iface) -{ - Binding *This = (Binding*)iface; - - FIXME("(%p): stub\n", This); - - return E_NOTIMPL; -} - -static HRESULT WINAPI Binding_SetPriority(IBinding* iface, LONG nPriority) -{ - Binding *This = (Binding*)iface; - - FIXME("(%p)->(%d): stub\n", This, nPriority); - - return E_NOTIMPL; -} - -static HRESULT WINAPI Binding_Suspend(IBinding* iface) -{ - Binding *This = (Binding*)iface; - - FIXME("(%p): stub\n", This); - - return E_NOTIMPL; -} - -static void Binding_CloseCacheDownload(Binding *This) -{ - CloseHandle(This->hCacheFile); - This->hCacheFile = 0; - UMCloseCacheFileStream(This->pstrCache); - IStream_Release((IStream *)This->pstrCache); - This->pstrCache = 0; -} - -static HRESULT Binding_MoreCacheData(Binding *This, const char *buf, DWORD dwBytes) -{ - DWORD written; - - if (WriteFile(This->hCacheFile, buf, dwBytes, &written, NULL) && written == dwBytes) - { - HRESULT hr; - - This->total_read += written; - hr = IBindStatusCallback_OnProgress(This->pbscb, - This->total_read + written, - This->expected_size, - (This->total_read == written) ? - BINDSTATUS_BEGINDOWNLOADDATA : - BINDSTATUS_DOWNLOADINGDATA, - This->URLName); - if (hr == S_OK) - { - STGMEDIUM stg; - FORMATETC fmt; - - fmt.cfFormat = 0; - fmt.ptd = NULL; - fmt.dwAspect = 0; - fmt.lindex = -1; - fmt.tymed = TYMED_ISTREAM; - - stg.tymed = TYMED_ISTREAM; - stg.u.pstm = (IStream *)This->pstrCache; - stg.pUnkForRelease = NULL; - - hr = IBindStatusCallback_OnDataAvailable(This->pbscb, - (This->total_read == written) ? - BSCF_FIRSTDATANOTIFICATION : - BSCF_INTERMEDIATEDATANOTIFICATION, - This->total_read + written, - &fmt, - &stg); - } - if (written < dwBytes) - return STG_E_MEDIUMFULL; - else - return hr; - } - return HRESULT_FROM_WIN32(GetLastError()); -} - -static void Binding_FinishedDownload(Binding *This, HRESULT hr) -{ - STGMEDIUM stg; - FORMATETC fmt; - - fmt.ptd = NULL; - fmt.dwAspect = 0; - fmt.lindex = -1; - fmt.tymed = TYMED_ISTREAM; - - stg.tymed = TYMED_ISTREAM; - stg.u.pstm = (IStream *)This->pstrCache; - stg.pUnkForRelease = NULL; - - IBindStatusCallback_OnProgress(This->pbscb, This->total_read, This->expected_size, - BINDSTATUS_ENDDOWNLOADDATA, This->URLName); - IBindStatusCallback_OnDataAvailable(This->pbscb, BSCF_LASTDATANOTIFICATION, This->total_read, &fmt, &stg); - if (hr != S_OK) - { - WCHAR *pwchError = 0; - - FormatMessageW (FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_ALLOCATE_BUFFER, - NULL, (DWORD) hr, - 0, (LPWSTR) &pwchError, - 0, NULL); - if (!pwchError) - { - static const WCHAR achFormat[] = { '%', '0', '8', 'x', 0 }; - - pwchError =(WCHAR *) LocalAlloc(LMEM_FIXED, sizeof(WCHAR) * 9); - wsprintfW(pwchError, achFormat, hr); - } - IBindStatusCallback_OnStopBinding(This->pbscb, hr, pwchError); - LocalFree(pwchError); - } - else - { - IBindStatusCallback_OnStopBinding(This->pbscb, hr, NULL); - } - IBindStatusCallback_Release(This->pbscb); - This->pbscb = 0; -} - -static const IBindingVtbl BindingVtbl = -{ - Binding_QueryInterface, - Binding_AddRef, - Binding_Release, - Binding_Abort, - Binding_Suspend, - Binding_Resume, - Binding_SetPriority, - Binding_GetPriority, - Binding_GetBindResult -}; - -/* filemoniker data structure */ typedef struct {
const IMonikerVtbl* lpvtbl; /* VTable relative to the IMoniker interface.*/ @@ -493,158 +248,6 @@ /****************************************************************************** * URLMoniker_BindToStorage ******************************************************************************/ -static HRESULT URLMonikerImpl_BindToStorage_hack(LPCWSTR URLName, IBindCtx* pbc, VOID** ppvObject) -{ - HRESULT hres; - BINDINFO bi; - DWORD bindf; - WCHAR szFileName[MAX_PATH + 1]; - Binding *bind; - int len; - - WARN("(%s %p %p)\n", debugstr_w(URLName), pbc, ppvObject); - - bind = heap_alloc_zero(sizeof(Binding)); - bind->lpVtbl = &BindingVtbl; - bind->ref = 1; - URLMON_LockModule(); - - len = lstrlenW(URLName)+1; - bind->URLName = heap_alloc(len*sizeof(WCHAR)); - memcpy(bind->URLName, URLName, len*sizeof(WCHAR)); - - hres = UMCreateStreamOnCacheFile(bind->URLName, 0, szFileName, &bind->hCacheFile, &bind->pstrCache); - - if(SUCCEEDED(hres)) { - TRACE("Created stream...\n"); - - *ppvObject = (void *) bind->pstrCache; - IStream_AddRef((IStream *) bind->pstrCache); - - hres = IBindCtx_GetObjectParam(pbc, BSCBHolder, (IUnknown**)&bind->pbscb); - if(SUCCEEDED(hres)) { - TRACE("Got IBindStatusCallback...\n"); - - memset(&bi, 0, sizeof(bi)); - bi.cbSize = sizeof(bi); - bindf = 0; - hres = IBindStatusCallback_GetBindInfo(bind->pbscb, &bindf, &bi); - if(SUCCEEDED(hres)) { - URL_COMPONENTSW url; - WCHAR *host, *path, *user, *pass; - - TRACE("got bindinfo. bindf = %08x extrainfo = %s bindinfof = %08x bindverb = %08x iid %s\n", - bindf, debugstr_w(bi.szExtraInfo), bi.grfBindInfoF, bi.dwBindVerb, debugstr_guid(&bi.iid)); - hres = IBindStatusCallback_OnStartBinding(bind->pbscb, 0, (IBinding*)bind); - TRACE("OnStartBinding rets %08x\n", hres); - - bind->expected_size = 0; - bind->total_read = 0; - - memset(&url, 0, sizeof(url)); - url.dwStructSize = sizeof(url); - url.dwSchemeLength = url.dwHostNameLength = url.dwUrlPathLength = url.dwUserNameLength = url.dwPasswordLength = 1; - InternetCrackUrlW(URLName, 0, ICU_ESCAPE, &url); - host = heap_alloc((url.dwHostNameLength + 1) * sizeof(WCHAR)); - memcpy(host, url.lpszHostName, url.dwHostNameLength * sizeof(WCHAR)); - host[url.dwHostNameLength] = '\0'; - path = heap_alloc((url.dwUrlPathLength + 1) * sizeof(WCHAR)); - memcpy(path, url.lpszUrlPath, url.dwUrlPathLength * sizeof(WCHAR)); - path[url.dwUrlPathLength] = '\0'; - if (url.dwUserNameLength) - { - user = heap_alloc(((url.dwUserNameLength + 1) * sizeof(WCHAR))); - memcpy(user, url.lpszUserName, url.dwUserNameLength * sizeof(WCHAR)); - user[url.dwUserNameLength] = 0; - } - else - { - user = 0; - } - if (url.dwPasswordLength) - { - pass = heap_alloc(((url.dwPasswordLength + 1) * sizeof(WCHAR))); - memcpy(pass, url.lpszPassword, url.dwPasswordLength * sizeof(WCHAR)); - pass[url.dwPasswordLength] = 0; - } - else - { - pass = 0; - } - - - do { - bind->hinternet = InternetOpenA("User Agent", 0, NULL, NULL, 0); - if (!bind->hinternet) - { - hres = HRESULT_FROM_WIN32(GetLastError()); - break; - } - - if (!url.nPort) - url.nPort = INTERNET_DEFAULT_GOPHER_PORT; - bind->hconnect = InternetConnectW(bind->hinternet, host, url.nPort, user, pass, - INTERNET_SERVICE_GOPHER, 0, (DWORD_PTR)bind); - if (!bind->hconnect) - { - hres = HRESULT_FROM_WIN32(GetLastError()); - CloseHandle(bind->hinternet); - break; - } - - hres = IBindStatusCallback_OnProgress(bind->pbscb, 0, 0, 0x22, NULL); - hres = IBindStatusCallback_OnProgress(bind->pbscb, 0, 0, BINDSTATUS_FINDINGRESOURCE, NULL); - hres = IBindStatusCallback_OnProgress(bind->pbscb, 0, 0, BINDSTATUS_CONNECTING, NULL); - hres = IBindStatusCallback_OnProgress(bind->pbscb, 0, 0, BINDSTATUS_SENDINGREQUEST, NULL); - - bind->hrequest = GopherOpenFileW(bind->hconnect, - path, - 0, - INTERNET_FLAG_RELOAD, - 0); - if (bind->hrequest) - { - TRACE("res = %d gle = %u url len = %d\n", hres, GetLastError(), bind->expected_size); - - IBindStatusCallback_OnProgress(bind->pbscb, 0, 0, BINDSTATUS_CACHEFILENAMEAVAILABLE, szFileName); - - while(1) { - char buf[4096]; - DWORD bufread; - if(InternetReadFile(bind->hrequest, buf, sizeof(buf), &bufread)) { - TRACE("read %d bytes %s...\n", bufread, debugstr_an(buf, 10)); - if(bufread == 0) break; - hres = Binding_MoreCacheData(bind, buf, bufread); - } else - break; - } - InternetCloseHandle(bind->hrequest); - hres = S_OK; - }else { - hres = HRESULT_FROM_WIN32(GetLastError()); - } - - - InternetCloseHandle(bind->hconnect); - InternetCloseHandle(bind->hinternet); - } while(0); - - Binding_FinishedDownload(bind, hres); - Binding_CloseCacheDownload(bind); - - heap_free(user); - heap_free(pass); - heap_free(path); - heap_free(host); - } - } - } - - IBinding_Release((IBinding*)bind); - - return hres; -} - static HRESULT WINAPI URLMonikerImpl_BindToStorage(IMoniker* iface, IBindCtx* pbc, IMoniker* pmkToLeft, @@ -652,25 +255,11 @@ VOID** ppvObject) { URLMonikerImpl *This = (URLMonikerImpl*)iface; - WCHAR schema[64]; - BOOL bret; - - URL_COMPONENTSW url = {sizeof(URL_COMPONENTSW), schema, - sizeof(schema)/sizeof(WCHAR), 0, NULL, 0, 0, NULL, 0, NULL, 0, NULL, 0, NULL, 0}; + + TRACE("(%p)->(%p %p %s %p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppvObject);
if(pmkToLeft) FIXME("Unsupported pmkToLeft\n"); - - bret = InternetCrackUrlW(This->URLName, 0, ICU_ESCAPE, &url); - if(!bret) { - ERR("InternetCrackUrl failed: %u\n", GetLastError()); - return E_FAIL; - } - - if(IsEqualGUID(&IID_IStream, riid) && url.nScheme == INTERNET_SCHEME_GOPHER) - return URLMonikerImpl_BindToStorage_hack(This->URLName, pbc, ppvObject); - - TRACE("(%p)->(%p %p %s %p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppvObject);
return bind_to_storage(This->URLName, pbc, riid, ppvObject); }
Modified: trunk/reactos/dll/win32/urlmon/umstream.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/urlmon/umstream.c... ============================================================================== --- trunk/reactos/dll/win32/urlmon/umstream.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/urlmon/umstream.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -30,342 +30,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
-static const IStreamVtbl stvt; - -HRESULT UMCreateStreamOnCacheFile(LPCWSTR pszURL, - DWORD dwSize, - LPWSTR pszFileName, - HANDLE *phfile, - IUMCacheStream **ppstr) -{ - IUMCacheStream* ucstr; - HANDLE handle; - DWORD size; - LPWSTR url, c, ext = NULL; - HRESULT hr; - - size = (strlenW(pszURL)+1)*sizeof(WCHAR); - url = heap_alloc(size); - memcpy(url, pszURL, size); - - for (c = url; *c && *c != '#' && *c != '?'; ++c) - { - if (*c == '.') - ext = c+1; - else if(*c == '/') - ext = NULL; - } - - *c = 0; - - if(!CreateUrlCacheEntryW(url, dwSize, ext, pszFileName, 0)) - hr = HRESULT_FROM_WIN32(GetLastError()); - else - hr = S_OK; - - heap_free(url); - - if (hr != S_OK) - return hr; - - TRACE("Opening %s\n", debugstr_w(pszFileName) ); - - handle = CreateFileW( pszFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, 0, NULL ); - if( handle == INVALID_HANDLE_VALUE ) - return HRESULT_FROM_WIN32(GetLastError()); - - if (phfile) - { - /* Call CreateFileW again because we need a handle with its own file pointer, and DuplicateHandle will return - * a handle that shares its file pointer with the original. - */ - *phfile = CreateFileW( pszFileName, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); - - if (*phfile == (HANDLE) HFILE_ERROR) - { - DWORD dwError = GetLastError(); - - CloseHandle(handle); - return HRESULT_FROM_WIN32(dwError); - } - } - - ucstr = heap_alloc_zero(sizeof(IUMCacheStream)); - if(ucstr) - { - ucstr->pszURL = heap_alloc_zero(sizeof(WCHAR) * (lstrlenW(pszURL) + 1)); - if (ucstr->pszURL) - { - ucstr->pszFileName = heap_alloc_zero(sizeof(WCHAR) * (lstrlenW(pszFileName) + 1)); - if (ucstr->pszFileName) - { - ucstr->lpVtbl=&stvt; - ucstr->ref = 1; - ucstr->handle = handle; - ucstr->closed = 0; - lstrcpyW(ucstr->pszURL, pszURL); - lstrcpyW(ucstr->pszFileName, pszFileName); - - *ppstr = ucstr; - - return S_OK; - } - heap_free(ucstr->pszURL); - } - heap_free(ucstr); - } - CloseHandle(handle); - if (phfile) - CloseHandle(*phfile); - return E_OUTOFMEMORY; -} - -void UMCloseCacheFileStream(IUMCacheStream *This) -{ - if (!This->closed) - { - FILETIME ftZero; - - ftZero.dwLowDateTime = ftZero.dwHighDateTime = 0; - - This->closed = 1; - CommitUrlCacheEntryW(This->pszURL, - This->pszFileName, - ftZero, - ftZero, - NORMAL_CACHE_ENTRY, - 0, - 0, - 0, - 0); - } -} - -/************************************************************************** -* IStream_fnQueryInterface -*/ -static HRESULT WINAPI IStream_fnQueryInterface(IStream *iface, - REFIID riid, - LPVOID *ppvObj) -{ - IUMCacheStream *This = (IUMCacheStream *)iface; - - TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj); - - *ppvObj = NULL; - - if(IsEqualIID(riid, &IID_IUnknown) || - IsEqualIID(riid, &IID_IStream)) - { - *ppvObj = This; - } - - if(*ppvObj) - { - IStream_AddRef((IStream*)*ppvObj); - TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj); - return S_OK; - } - TRACE("-- Interface: E_NOINTERFACE\n"); - return E_NOINTERFACE; -} - -/************************************************************************** -* IStream_fnAddRef -*/ -static ULONG WINAPI IStream_fnAddRef(IStream *iface) -{ - IUMCacheStream *This = (IUMCacheStream *)iface; - ULONG refCount = InterlockedIncrement(&This->ref); - - TRACE("(%p)->(count=%u)\n", This, refCount - 1); - - return refCount; -} - -/************************************************************************** -* IStream_fnRelease -*/ -static ULONG WINAPI IStream_fnRelease(IStream *iface) -{ - IUMCacheStream *This = (IUMCacheStream *)iface; - ULONG refCount = InterlockedDecrement(&This->ref); - - TRACE("(%p)->(count=%u)\n", This, refCount + 1); - - if (!refCount) - { - TRACE(" destroying UMCacheStream (%p)\n",This); - UMCloseCacheFileStream(This); - CloseHandle(This->handle); - heap_free(This->pszFileName); - heap_free(This->pszURL); - heap_free(This); - } - return refCount; -} - -static HRESULT WINAPI IStream_fnRead (IStream * iface, - void* pv, - ULONG cb, - ULONG* pcbRead) -{ - ULONG dwBytesRead; - IUMCacheStream *This = (IUMCacheStream *)iface; - - TRACE("(%p)->(%p,0x%08x,%p)\n",This, pv, cb, pcbRead); - - if ( !pv ) - return STG_E_INVALIDPOINTER; - - if ( !pcbRead) - pcbRead = &dwBytesRead; - - if ( ! ReadFile( This->handle, pv, cb, pcbRead, NULL ) ) - return S_FALSE; - - if (!*pcbRead) - return This->closed ? S_FALSE : E_PENDING; - return S_OK; -} - -static HRESULT WINAPI IStream_fnWrite (IStream * iface, - const void* pv, - ULONG cb, - ULONG* pcbWritten) -{ - return E_NOTIMPL; -} - -static HRESULT WINAPI IStream_fnSeek (IStream * iface, - LARGE_INTEGER dlibMove, - DWORD dwOrigin, - ULARGE_INTEGER* plibNewPosition) -{ - LARGE_INTEGER newpos; - IUMCacheStream *This = (IUMCacheStream *)iface; - - TRACE("(%p)\n",This); - - if (!SetFilePointerEx( This->handle, dlibMove, &newpos, dwOrigin )) - return E_FAIL; - - if (plibNewPosition) - plibNewPosition->QuadPart = newpos.QuadPart; - - return S_OK; -} - -static HRESULT WINAPI IStream_fnSetSize (IStream * iface, - ULARGE_INTEGER libNewSize) -{ - LARGE_INTEGER newpos; - IUMCacheStream *This = (IUMCacheStream *)iface; - - TRACE("(%p)\n",This); - - newpos.QuadPart = libNewSize.QuadPart; - if( ! SetFilePointerEx( This->handle, newpos, NULL, FILE_BEGIN ) ) - return E_FAIL; - - if( ! SetEndOfFile( This->handle ) ) - return E_FAIL; - - return S_OK; -} - -static HRESULT WINAPI IStream_fnCopyTo (IStream * iface, - IStream* pstm, - ULARGE_INTEGER cb, - ULARGE_INTEGER* pcbRead, - ULARGE_INTEGER* pcbWritten) -{ - IUMCacheStream *This = (IUMCacheStream *)iface; - - TRACE("(%p)\n",This); - - return E_NOTIMPL; -} - -static HRESULT WINAPI IStream_fnCommit (IStream * iface, - DWORD grfCommitFlags) -{ - IUMCacheStream *This = (IUMCacheStream *)iface; - - TRACE("(%p)\n",This); - - return E_NOTIMPL; -} - -static HRESULT WINAPI IStream_fnRevert (IStream * iface) -{ - IUMCacheStream *This = (IUMCacheStream *)iface; - - TRACE("(%p)\n",This); - - return E_NOTIMPL; -} -static HRESULT WINAPI IStream_fnLockRegion (IStream * iface, - ULARGE_INTEGER libOffset, - ULARGE_INTEGER cb, - DWORD dwLockType) -{ - IUMCacheStream *This = (IUMCacheStream *)iface; - - TRACE("(%p)\n",This); - - return E_NOTIMPL; -} -static HRESULT WINAPI IStream_fnUnlockRegion (IStream * iface, - ULARGE_INTEGER libOffset, - ULARGE_INTEGER cb, - DWORD dwLockType) -{ - IUMCacheStream *This = (IUMCacheStream *)iface; - - TRACE("(%p)\n",This); - - return E_NOTIMPL; -} -static HRESULT WINAPI IStream_fnStat (IStream * iface, - STATSTG* pstatstg, - DWORD grfStatFlag) -{ - IUMCacheStream *This = (IUMCacheStream *)iface; - - TRACE("(%p)\n",This); - - return E_NOTIMPL; -} -static HRESULT WINAPI IStream_fnClone (IStream * iface, - IStream** ppstm) -{ - IUMCacheStream *This = (IUMCacheStream *)iface; - - TRACE("(%p)\n",This); - - return E_NOTIMPL; -} - -static const IStreamVtbl stvt = -{ - IStream_fnQueryInterface, - IStream_fnAddRef, - IStream_fnRelease, - IStream_fnRead, - IStream_fnWrite, - IStream_fnSeek, - IStream_fnSetSize, - IStream_fnCopyTo, - IStream_fnCommit, - IStream_fnRevert, - IStream_fnLockRegion, - IStream_fnUnlockRegion, - IStream_fnStat, - IStream_fnClone - -}; - typedef struct ProxyBindStatusCallback { const IBindStatusCallbackVtbl *lpVtbl;
Modified: trunk/reactos/dll/win32/urlmon/urlmon.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/urlmon/urlmon.rbu... ============================================================================== --- trunk/reactos/dll/win32/urlmon/urlmon.rbuild [iso-8859-1] (original) +++ trunk/reactos/dll/win32/urlmon/urlmon.rbuild [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -15,6 +15,7 @@ <file>file.c</file> <file>format.c</file> <file>ftp.c</file> + <file>gopher.c</file> <file>http.c</file> <file>internet.c</file> <file>mk.c</file>
Modified: trunk/reactos/dll/win32/urlmon/urlmon_main.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/urlmon/urlmon_mai... ============================================================================== --- trunk/reactos/dll/win32/urlmon/urlmon_main.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/urlmon/urlmon_main.c [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -173,6 +173,8 @@ { &ClassFactoryVtbl, FileProtocol_Construct}; static const ClassFactory FtpProtocolCF = { &ClassFactoryVtbl, FtpProtocol_Construct}; +static const ClassFactory GopherProtocolCF = + { &ClassFactoryVtbl, GopherProtocol_Construct}; static const ClassFactory HttpProtocolCF = { &ClassFactoryVtbl, HttpProtocol_Construct}; static const ClassFactory HttpSProtocolCF = @@ -193,6 +195,7 @@
static const WCHAR wszFile[] = {'f','i','l','e',0}; static const WCHAR wszFtp[] = {'f','t','p',0}; +static const WCHAR wszGopher[] = {'g','o','p','h','e','r',0}; static const WCHAR wszHttp[] = {'h','t','t','p',0}; static const WCHAR wszHttps[] = {'h','t','t','p','s',0}; static const WCHAR wszMk[] = {'m','k',0}; @@ -201,6 +204,7 @@ { { &CLSID_FileProtocol, CLASSFACTORY(&FileProtocolCF), wszFile }, { &CLSID_FtpProtocol, CLASSFACTORY(&FtpProtocolCF), wszFtp }, + { &CLSID_GopherProtocol, CLASSFACTORY(&GopherProtocolCF), wszGopher }, { &CLSID_HttpProtocol, CLASSFACTORY(&HttpProtocolCF), wszHttp }, { &CLSID_HttpSProtocol, CLASSFACTORY(&HttpSProtocolCF), wszHttps }, { &CLSID_MkProtocol, CLASSFACTORY(&MkProtocolCF), wszMk },
Modified: trunk/reactos/dll/win32/urlmon/urlmon_main.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/urlmon/urlmon_mai... ============================================================================== --- trunk/reactos/dll/win32/urlmon/urlmon_main.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/urlmon/urlmon_main.h [iso-8859-1] Sat Mar 7 11:34:55 2009 @@ -42,6 +42,7 @@ extern HRESULT HttpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT HttpSProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT FtpProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); +extern HRESULT GopherProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj); extern HRESULT MkProtocol_Construct(IUnknown *pUnkOuter, LPVOID *ppobj);
/********************************************************************** @@ -54,19 +55,6 @@ #define ICOM_THIS_MULTI(impl,field,iface) impl* const This=(impl*)((char*)(iface) - offsetof(impl,field)) #define DEFINE_THIS2(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,ifc))) #define DEFINE_THIS(cls,ifc,iface) DEFINE_THIS2(cls,lp ## ifc ## Vtbl,iface) - -typedef struct -{ - const IStreamVtbl *lpVtbl; - LONG ref; - HANDLE handle; - BOOL closed; - WCHAR *pszFileName; - WCHAR *pszURL; -} IUMCacheStream; - -HRESULT UMCreateStreamOnCacheFile(LPCWSTR pszURL, DWORD dwSize, LPWSTR pszFileName, HANDLE *phfile, IUMCacheStream **ppstr); -void UMCloseCacheFileStream(IUMCacheStream *pstr);
IInternetProtocolInfo *get_protocol_info(LPCWSTR url); HRESULT get_protocol_handler(LPCWSTR url, CLSID *clsid, IClassFactory **ret);