URLMON: Added RegisterFormatEnumerator and RevokeFormatEnumerator
implementation
Jacek Caban
jack at itma.pwr.wroc.pl
Sat Sep 3 06:38:37 CDT 2005
Changelog:
Added RegisterFormatEnumerator and RevokeFormatEnumerator implementation
-------------- next part --------------
Index: dlls/urlmon/urlmon.spec
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/urlmon.spec,v
retrieving revision 1.37
diff -u -p -r1.37 urlmon.spec
--- dlls/urlmon/urlmon.spec 2 Sep 2005 12:17:30 -0000 1.37
+++ dlls/urlmon/urlmon.spec 3 Sep 2005 09:33:32 -0000
@@ -56,12 +56,12 @@
@ stdcall ObtainUserAgentString(long str ptr)
@ stub PrivateCoInstall
@ stdcall RegisterBindStatusCallback(ptr ptr ptr long)
-@ stub RegisterFormatEnumerator
+@ stdcall RegisterFormatEnumerator(ptr ptr long)
@ stub RegisterMediaTypeClass
@ stub RegisterMediaTypes
@ stdcall ReleaseBindInfo(ptr)
@ stdcall RevokeBindStatusCallback(ptr ptr)
-@ stub RevokeFormatEnumerator
+@ stdcall RevokeFormatEnumerator(ptr ptr)
@ stub SetSoftwareUpdateAdvertisementState
@ stub URLDownloadA
@ stub URLDownloadToCacheFileA
Index: dlls/urlmon/format.c
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/format.c,v
retrieving revision 1.1
diff -u -p -r1.1 format.c
--- dlls/urlmon/format.c 2 Sep 2005 12:17:30 -0000 1.1
+++ dlls/urlmon/format.c 3 Sep 2005 09:33:32 -0000
@@ -31,6 +31,8 @@
WINE_DEFAULT_DEBUG_CHANNEL(urlmon);
+static WCHAR wszEnumFORMATETC[] = {'_','E','n','u','m','F','O','R','M','A','T','E','T','C','_',0};
+
typedef struct {
const IEnumFORMATETCVtbl *lpEnumFORMATETCVtbl;
@@ -189,3 +191,32 @@ HRESULT WINAPI CreateFormatEnumerator(UI
*ppenumfmtetc = EnumFORMATETC_Create(cfmtetc, rgfmtetc, 0);
return S_OK;
}
+
+/**********************************************************
+ * RegisterFormatEnumerator (urlmon.@)
+ */
+HRESULT WINAPI RegisterFormatEnumerator(LPBC pBC, IEnumFORMATETC *pEFetc, DWORD reserved)
+{
+ TRACE("(%p %p %ld)\n", pBC, pEFetc, reserved);
+
+ if(reserved)
+ WARN("reserved != 0\n");
+
+ if(!pBC || !pEFetc)
+ return E_INVALIDARG;
+
+ return IBindCtx_RegisterObjectParam(pBC, wszEnumFORMATETC, (IUnknown*)pEFetc);
+}
+
+/**********************************************************
+ * RevokeFormatEnumerator (urlmon.@)
+ */
+HRESULT WINAPI RevokeFormatEnumerator(LPBC pbc, IEnumFORMATETC *pEFetc)
+{
+ TRACE("(%p %p)\n", pbc, pEFetc);
+
+ if(!pbc)
+ return E_INVALIDARG;
+
+ return IBindCtx_RevokeObjectParam(pbc, wszEnumFORMATETC);
+}
Index: dlls/urlmon/tests/misc.c
===================================================================
RCS file: /home/wine/wine/dlls/urlmon/tests/misc.c,v
retrieving revision 1.1
diff -u -p -r1.1 misc.c
--- dlls/urlmon/tests/misc.c 2 Sep 2005 12:17:29 -0000 1.1
+++ dlls/urlmon/tests/misc.c 3 Sep 2005 09:33:32 -0000
@@ -129,7 +129,81 @@ static void test_CreateFormatEnum(void)
IEnumFORMATETC_Release(fenum);
}
+static void test_RegisterFormatEnumerator(void)
+{
+ IBindCtx *bctx = NULL;
+ IEnumFORMATETC *format = NULL, *format2 = NULL;
+ IUnknown *unk = NULL;
+ HRESULT hres;
+
+ static FORMATETC formatetc = {0,NULL,0,0,0};
+ static WCHAR wszEnumFORMATETC[] =
+ {'_','E','n','u','m','F','O','R','M','A','T','E','T','C','_',0};
+
+ CreateBindCtx(0, &bctx);
+
+ hres = CreateFormatEnumerator(1, &formatetc, &format);
+ ok(hres == S_OK, "CreateFormatEnumerator failed: %08lx\n", hres);
+ if(FAILED(hres))
+ return;
+
+ hres = RegisterFormatEnumerator(NULL, format, 0);
+ ok(hres == E_INVALIDARG,
+ "RegisterFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
+ hres = RegisterFormatEnumerator(bctx, NULL, 0);
+ ok(hres == E_INVALIDARG,
+ "RegisterFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
+
+ hres = RegisterFormatEnumerator(bctx, format, 0);
+ ok(hres == S_OK, "RegisterFormatEnumerator failed: %08lx\n", hres);
+
+ hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
+ ok(hres == S_OK, "GetObjectParam failed: %08lx\n", hres);
+ ok(unk == (IUnknown*)format, "unk != format\n");
+
+ hres = RevokeFormatEnumerator(NULL, format);
+ ok(hres == E_INVALIDARG,
+ "RevokeFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
+
+ hres = RevokeFormatEnumerator(bctx, format);
+ ok(hres == S_OK, "RevokeFormatEnumerator failed: %08lx\n", hres);
+
+ hres = RevokeFormatEnumerator(bctx, format);
+ ok(hres == E_FAIL, "RevokeFormatEnumerator failed: %08lx, expected E_FAIL\n", hres);
+
+ hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
+ ok(hres == E_FAIL, "GetObjectParam failed: %08lx, expected E_FAIL\n", hres);
+
+ hres = RegisterFormatEnumerator(bctx, format, 0);
+ ok(hres == S_OK, "RegisterFormatEnumerator failed: %08lx\n", hres);
+
+ hres = CreateFormatEnumerator(1, &formatetc, &format2);
+ ok(hres == S_OK, "CreateFormatEnumerator failed: %08lx\n", hres);
+
+ if(SUCCEEDED(hres)) {
+ hres = RevokeFormatEnumerator(bctx, format);
+ ok(hres == S_OK, "RevokeFormatEnumerator failed: %08lx\n", hres);
+
+ IEnumFORMATETC_Release(format2);
+ }
+
+ hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
+ ok(hres == E_FAIL, "GetObjectParam failed: %08lx, expected E_FAIL\n", hres);
+
+ IEnumFORMATETC_Release(format);
+
+ hres = RegisterFormatEnumerator(bctx, format, 0);
+ ok(hres == S_OK, "RegisterFormatEnumerator failed: %08lx\n", hres);
+ hres = RevokeFormatEnumerator(bctx, NULL);
+ ok(hres == S_OK, "RevokeFormatEnumerator failed: %08lx\n", hres);
+ hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
+ ok(hres == E_FAIL, "GetObjectParam failed: %08lx, expected E_FAIL\n", hres);
+
+ IBindCtx_Release(bctx);
+}
+
START_TEST(misc)
{
test_CreateFormatEnum();
+ test_RegisterFormatEnumerator();
}
More information about the wine-patches
mailing list