inetcomm: Add IMimeAllocator implementation.

This commit is contained in:
Huw Davies 2007-12-18 11:50:22 +00:00 committed by Alexandre Julliard
parent cbf096329c
commit 5df59e29c9
6 changed files with 230 additions and 3 deletions

View File

@ -63,7 +63,7 @@
@ stub MimeOleGenerateCID
@ stub MimeOleGenerateFileName
@ stub MimeOleGenerateMID
@ stub MimeOleGetAllocator
@ stdcall MimeOleGetAllocator(ptr)
@ stub MimeOleGetBodyPropA
@ stub MimeOleGetBodyPropW
@ stub MimeOleGetCertsFromThumbprints

View File

@ -131,8 +131,8 @@ static const struct IClassFactoryVtbl cf_vtbl =
cf_LockServer
};
static cf mime_body_cf = { &cf_vtbl, MimeBody_create };
static cf mime_body_cf = { &cf_vtbl, MimeBody_create };
static cf mime_allocator_cf = { &cf_vtbl, MimeAllocator_create };
/***********************************************************************
* DllGetClassObject (INETCOMM.@)
@ -147,6 +147,10 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
{
cf = (IClassFactory*) &mime_body_cf.lpVtbl;
}
else if( IsEqualCLSID( rclsid, &CLSID_IMimeAllocator ))
{
cf = (IClassFactory*) &mime_allocator_cf.lpVtbl;
}
if ( !cf )
{

View File

@ -70,3 +70,4 @@ BOOL InternetTransport_RegisterClass(HINSTANCE hInstance);
void InternetTransport_UnregisterClass(HINSTANCE hInstance);
HRESULT MimeBody_create(IUnknown *outer, void **obj);
HRESULT MimeAllocator_create(IUnknown *outer, void **obj);

View File

@ -1824,3 +1824,208 @@ HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity **ppSecurity)
*ppSecurity = (IMimeSecurity *)&This->lpVtbl;
return S_OK;
}
typedef struct
{
IMimeAllocatorVtbl *lpVtbl;
} MimeAllocator;
static HRESULT WINAPI MimeAlloc_QueryInterface(
IMimeAllocator* iface,
REFIID riid,
void **obj)
{
TRACE("(%p)->(%s, %p)\n", iface, debugstr_guid(riid), obj);
if (IsEqualIID(riid, &IID_IUnknown) ||
IsEqualIID(riid, &IID_IMalloc) ||
IsEqualIID(riid, &IID_IMimeAllocator))
{
*obj = iface;
IUnknown_AddRef(iface);
return S_OK;
}
FIXME("no interface for %s\n", debugstr_guid(riid));
*obj = NULL;
return E_NOINTERFACE;
}
static ULONG WINAPI MimeAlloc_AddRef(
IMimeAllocator* iface)
{
return 2;
}
static ULONG WINAPI MimeAlloc_Release(
IMimeAllocator* iface)
{
return 1;
}
static LPVOID WINAPI MimeAlloc_Alloc(
IMimeAllocator* iface,
ULONG cb)
{
return CoTaskMemAlloc(cb);
}
static LPVOID WINAPI MimeAlloc_Realloc(
IMimeAllocator* iface,
LPVOID pv,
ULONG cb)
{
return CoTaskMemRealloc(pv, cb);
}
static void WINAPI MimeAlloc_Free(
IMimeAllocator* iface,
LPVOID pv)
{
return CoTaskMemFree(pv);
}
static ULONG WINAPI MimeAlloc_GetSize(
IMimeAllocator* iface,
LPVOID pv)
{
FIXME("stub\n");
return 0;
}
static int WINAPI MimeAlloc_DidAlloc(
IMimeAllocator* iface,
LPVOID pv)
{
FIXME("stub\n");
return 0;
}
static void WINAPI MimeAlloc_HeapMinimize(
IMimeAllocator* iface)
{
FIXME("stub\n");
return;
}
static HRESULT WINAPI MimeAlloc_FreeParamInfoArray(
IMimeAllocator* iface,
ULONG cParams,
LPMIMEPARAMINFO prgParam,
boolean fFreeArray)
{
ULONG i;
TRACE("(%p)->(%d, %p, %d)\n", iface, cParams, prgParam, fFreeArray);
for(i = 0; i < cParams; i++)
{
IMimeAllocator_Free(iface, prgParam[i].pszName);
IMimeAllocator_Free(iface, prgParam[i].pszData);
}
if(fFreeArray) IMimeAllocator_Free(iface, prgParam);
return S_OK;
}
static HRESULT WINAPI MimeAlloc_FreeAddressList(
IMimeAllocator* iface,
LPADDRESSLIST pList)
{
FIXME("stub\n");
return E_NOTIMPL;
}
static HRESULT WINAPI MimeAlloc_FreeAddressProps(
IMimeAllocator* iface,
LPADDRESSPROPS pAddress)
{
FIXME("stub\n");
return E_NOTIMPL;
}
static HRESULT WINAPI MimeAlloc_ReleaseObjects(
IMimeAllocator* iface,
ULONG cObjects,
IUnknown **prgpUnknown,
boolean fFreeArray)
{
FIXME("stub\n");
return E_NOTIMPL;
}
static HRESULT WINAPI MimeAlloc_FreeEnumHeaderRowArray(
IMimeAllocator* iface,
ULONG cRows,
LPENUMHEADERROW prgRow,
boolean fFreeArray)
{
FIXME("stub\n");
return E_NOTIMPL;
}
static HRESULT WINAPI MimeAlloc_FreeEnumPropertyArray(
IMimeAllocator* iface,
ULONG cProps,
LPENUMPROPERTY prgProp,
boolean fFreeArray)
{
FIXME("stub\n");
return E_NOTIMPL;
}
static HRESULT WINAPI MimeAlloc_FreeThumbprint(
IMimeAllocator* iface,
THUMBBLOB *pthumbprint)
{
FIXME("stub\n");
return E_NOTIMPL;
}
static HRESULT WINAPI MimeAlloc_PropVariantClear(
IMimeAllocator* iface,
LPPROPVARIANT pProp)
{
FIXME("stub\n");
return E_NOTIMPL;
}
static IMimeAllocatorVtbl mime_alloc_vtbl =
{
MimeAlloc_QueryInterface,
MimeAlloc_AddRef,
MimeAlloc_Release,
MimeAlloc_Alloc,
MimeAlloc_Realloc,
MimeAlloc_Free,
MimeAlloc_GetSize,
MimeAlloc_DidAlloc,
MimeAlloc_HeapMinimize,
MimeAlloc_FreeParamInfoArray,
MimeAlloc_FreeAddressList,
MimeAlloc_FreeAddressProps,
MimeAlloc_ReleaseObjects,
MimeAlloc_FreeEnumHeaderRowArray,
MimeAlloc_FreeEnumPropertyArray,
MimeAlloc_FreeThumbprint,
MimeAlloc_PropVariantClear
};
static MimeAllocator mime_allocator =
{
&mime_alloc_vtbl
};
HRESULT MimeAllocator_create(IUnknown *outer, void **obj)
{
if(outer) return CLASS_E_NOAGGREGATION;
*obj = &mime_allocator;
return S_OK;
}
HRESULT WINAPI MimeOleGetAllocator(IMimeAllocator **alloc)
{
return MimeAllocator_create(NULL, (void**)alloc);
}

View File

@ -440,6 +440,12 @@ static struct regsvr_coclass const coclass_list[] = {
"inetcomm.dll",
"Both"
},
{ &CLSID_IMimeAllocator,
"CLSID_IMimeAllocator",
NULL,
"inetcomm.dll",
"Both"
},
{ &CLSID_IMimeMessage,
"CLSID_IMimeMessage",
NULL,

View File

@ -137,11 +137,22 @@ static void test_CreateBody(void)
IMimeBody_Release(body);
}
static void test_Allocator(void)
{
HRESULT hr;
IMimeAllocator *alloc;
hr = MimeOleGetAllocator(&alloc);
ok(hr == S_OK, "ret %08x\n", hr);
IMimeAllocator_Release(alloc);
}
START_TEST(mimeole)
{
OleInitialize(NULL);
test_CreateVirtualStream();
test_CreateSecurity();
test_CreateBody();
test_Allocator();
OleUninitialize();
}