shlwapi
Jürgen Schmied
juergenschmied at lycos.de
Sat Jun 29 04:10:09 CDT 2002
- small fixes
- implementations for SHLWAPI_267, SHLWAPI_268
please apply after shell32 patch since this patch also changes STRRET related
functions.
---
together with the shell32 patch the myfolder.dll starts working partially.
---
juergen.schmied at debitel.net
-------------- next part --------------
Index: wine/dlls/shlwapi/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/shlwapi/Makefile.in,v
retrieving revision 1.17
diff -d -u -r1.17 Makefile.in
--- wine/dlls/shlwapi/Makefile.in 4 Jun 2002 23:11:09 -0000 1.17
+++ wine/dlls/shlwapi/Makefile.in 27 Jun 2002 09:51:30 -0000
@@ -4,7 +4,7 @@
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = shlwapi.dll
-IMPORTS = user32 gdi32 advapi32 kernel32
+IMPORTS = user32 gdi32 advapi32 kernel32 ole32
EXTRALIBS = $(LIBUUID) $(LIBUNICODE)
LDDLLFLAGS = @LDDLLFLAGS@
@@ -28,3 +28,4 @@
@MAKE_DLL_RULES@
### Dependencies:
+
Index: wine/dlls/shlwapi/ordinal.c
===================================================================
RCS file: /home/wine/wine/dlls/shlwapi/ordinal.c,v
retrieving revision 1.40
diff -d -u -r1.40 ordinal.c
--- wine/dlls/shlwapi/ordinal.c 31 May 2002 23:40:52 -0000 1.40
+++ wine/dlls/shlwapi/ordinal.c 27 Jun 2002 09:51:34 -0000
@@ -2,7 +2,7 @@
* SHLWAPI ordinal functions
*
* Copyright 1997 Marcus Meissner
- * 1998 Jrgen Schmied
+ * 1998 Jrgen Schmied
* 2001 Jon Griffiths
*
* This library is free software; you can redistribute it and/or
@@ -1512,23 +1512,21 @@
LPVOID w, /* [in] table of interfaces */
IFACE_INDEX_TBL *x, /* [in] array of REFIIDs and indexes to above */
REFIID riid, /* [in] REFIID to get interface for */
- LPVOID *z) /* [out] location to get interface pointer */
+ LPVOID *ppv) /* [out] location to get interface pointer */
{
HRESULT ret;
IUnknown *a_vtbl;
IFACE_INDEX_TBL *xmove;
- TRACE("(%p %p %s %p)\n",
- w,x,debugstr_guid(riid),z);
- if (z) {
+ TRACE("(%p %p %s %p)\n", w,x,debugstr_guid(riid),ppv);
+ if (ppv) {
xmove = x;
while (xmove->refid) {
- TRACE("trying (indx %ld) %s\n", xmove->indx,
- debugstr_guid(xmove->refid));
+ TRACE("trying (indx %ld) %s\n", xmove->indx, debugstr_guid(xmove->refid));
if (IsEqualIID(riid, xmove->refid)) {
a_vtbl = (IUnknown*)(xmove->indx + (LPBYTE)w);
TRACE("matched, returning (%p)\n", a_vtbl);
- *z = (LPVOID)a_vtbl;
+ *ppv = (LPVOID)a_vtbl;
IUnknown_AddRef(a_vtbl);
return S_OK;
}
@@ -1538,14 +1536,16 @@
if (IsEqualIID(riid, &IID_IUnknown)) {
a_vtbl = (IUnknown*)(x->indx + (LPBYTE)w);
TRACE("returning first for IUnknown (%p)\n", a_vtbl);
- *z = (LPVOID)a_vtbl;
+ *ppv = (LPVOID)a_vtbl;
IUnknown_AddRef(a_vtbl);
return S_OK;
}
- *z = 0;
+ *ppv = 0;
ret = E_NOINTERFACE;
} else
ret = E_POINTER;
+
+ TRACE("-- 0x%08lx\n", ret);
return ret;
}
@@ -1686,32 +1686,51 @@
/*************************************************************************
* @ [SHLWAPI.267]
+ *
+ * NOTES:
+ * This QueryInterface asks the inner object for a interface. In case
+ * of aggregation this request would be forwarded by the inner to the
+ * outer object. This function asks the inner object directly for the
+ * interface circumventing the forwarding to the outer object.
*/
HRESULT WINAPI SHLWAPI_267 (
- LPVOID w,
- LPVOID x,
- LPVOID y, /* [???] NOTE: same as 3rd parameter of SHLWAPI_219 */
- LPVOID z) /* [???] NOTE: same as 4th parameter of SHLWAPI_219 */
+ IUnknown * pUnk, /* outer object */
+ IUnknown * pInner, /* inner object */
+ IID * riid,
+ LPVOID* ppv)
{
- FIXME("(%p %p %p %p)stub\n",w,x,y,z);
-
- /* native seems to do:
- * SHLWAPI_219 ((LPVOID)(((LPSTR)x)-4), ???, (REFIID) y, (LPVOID*) z);
- */
+ HRESULT hret = E_NOINTERFACE;
+ TRACE("(pUnk=%p pInner=%p\n\tIID: %s %p)\n",pUnk,pInner,debugstr_guid(riid), ppv);
- *((LPDWORD)z) = 0xabba1200;
- return /* 0xabba1254 */ 0;
+ *ppv = NULL;
+ if(pUnk && pInner) {
+ hret = IUnknown_QueryInterface(pInner, riid, (LPVOID*)ppv);
+ if (SUCCEEDED(hret)) IUnknown_Release(pUnk);
+ }
+ TRACE("-- 0x%08lx\n", hret);
+ return hret;
}
/*************************************************************************
* @ [SHLWAPI.268]
+ * NOTES
+ * pInner is returned by SHLWAPI_267 as ppv
*/
DWORD WINAPI SHLWAPI_268 (
- LPVOID w,
- LPVOID x)
+ IUnknown * pUnk,
+ IUnknown ** pInner)
{
- FIXME("(%p %p)\n",w,x);
- return 0xabba1251; /* 0 = failure */
+ DWORD ret = 0;
+
+ TRACE("(pUnk=%p pInner=%p)\n",pUnk,pInner);
+
+ IUnknown_AddRef(pUnk);
+ if (pInner && *pInner) {
+ ret = IUnknown_Release(*pInner);
+ *pInner = NULL;
+ }
+ TRACE("-- count=%lu\n",ret);
+ return ret;
}
/*************************************************************************
@@ -2474,3 +2493,11 @@
TlsSetValue(SHLWAPI_ThreadRef_index, (LPVOID) punk);
return S_OK;
}
+
+
+
+
+
+
+
+
Index: wine/dlls/shlwapi/shlwapi.spec
===================================================================
RCS file: /home/wine/wine/dlls/shlwapi/shlwapi.spec,v
retrieving revision 1.38
diff -d -u -r1.38 shlwapi.spec
--- wine/dlls/shlwapi/shlwapi.spec 21 Jun 2002 19:15:49 -0000 1.38
+++ wine/dlls/shlwapi/shlwapi.spec 27 Jun 2002 09:51:39 -0000
@@ -724,3 +724,4 @@
@ stub StrFormatByteSize64A
@ stub StrFormatKBSizeA
@ stub StrFormatKBSizeW
+
Index: wine/dlls/shlwapi/string.c
===================================================================
RCS file: /home/wine/wine/dlls/shlwapi/string.c,v
retrieving revision 1.22
diff -d -u -r1.22 string.c
--- wine/dlls/shlwapi/string.c 4 Jun 2002 23:11:09 -0000 1.22
+++ wine/dlls/shlwapi/string.c 27 Jun 2002 09:51:40 -0000
@@ -486,14 +486,14 @@
{
case STRRET_WSTR:
WideCharToMultiByte(CP_ACP, 0, src->u.pOleStr, -1, (LPSTR)dest, len, NULL, NULL);
-/* SHFree(src->u.pOleStr); FIXME: is this right? */
+ CoTaskMemFree(src->u.pOleStr);
break;
- case STRRET_CSTRA:
+ case STRRET_CSTR:
lstrcpynA((LPSTR)dest, src->u.cStr, len);
break;
- case STRRET_OFFSETA:
+ case STRRET_OFFSET:
lstrcpynA((LPSTR)dest, ((LPCSTR)&pidl->mkid)+src->u.uOffset, len);
break;
@@ -531,15 +531,15 @@
{
case STRRET_WSTR:
lstrcpynW((LPWSTR)dest, src->u.pOleStr, len);
-/* SHFree(src->u.pOleStr); FIXME: is this right? */
+ CoTaskMemFree(src->u.pOleStr);
break;
- case STRRET_CSTRA:
+ case STRRET_CSTR:
if (!MultiByteToWideChar( CP_ACP, 0, src->u.cStr, -1, dest, len ) && len)
dest[len-1] = 0;
break;
- case STRRET_OFFSETA:
+ case STRRET_OFFSET:
if (pidl)
{
if (!MultiByteToWideChar( CP_ACP, 0, ((LPCSTR)&pidl->mkid)+src->u.uOffset, -1,
@@ -634,3 +634,8 @@
TRACE("<- '%s'\n", pszSource);
return trimmed;
}
+
+
+
+
+
More information about the wine-patches
mailing list