diff --git a/dlls/fusion/asmcache.c b/dlls/fusion/asmcache.c index 91256555a82..dd84d38e2b1 100644 --- a/dlls/fusion/asmcache.c +++ b/dlls/fusion/asmcache.c @@ -41,6 +41,19 @@ WINE_DEFAULT_DEBUG_CHANNEL(fusion); +typedef struct { + IAssemblyCache IAssemblyCache_iface; + + LONG ref; + HANDLE lock; +} IAssemblyCacheImpl; + +typedef struct { + IAssemblyCacheItem IAssemblyCacheItem_iface; + + LONG ref; +} IAssemblyCacheItemImpl; + static const WCHAR cache_mutex_nameW[] = {'_','_','W','I','N','E','_','F','U','S','I','O','N','_','C','A','C','H','E','_','M','U','T','E','X','_','_',0}; @@ -141,13 +154,6 @@ static BOOL get_assembly_directory(LPWSTR dir, DWORD size, const char *version, /* IAssemblyCache */ -typedef struct { - IAssemblyCache IAssemblyCache_iface; - - LONG ref; - HANDLE lock; -} IAssemblyCacheImpl; - static inline IAssemblyCacheImpl *impl_from_IAssemblyCache(IAssemblyCache *iface) { return CONTAINING_RECORD(iface, IAssemblyCacheImpl, IAssemblyCache_iface); @@ -351,16 +357,33 @@ done: return hr; } +static const IAssemblyCacheItemVtbl AssemblyCacheItemVtbl; + static HRESULT WINAPI IAssemblyCacheImpl_CreateAssemblyCacheItem(IAssemblyCache *iface, DWORD dwFlags, PVOID pvReserved, IAssemblyCacheItem **ppAsmItem, LPCWSTR pszAssemblyName) { - FIXME("(%p, %d, %p, %p, %s) stub!\n", iface, dwFlags, pvReserved, + IAssemblyCacheItemImpl *item; + + FIXME("(%p, %d, %p, %p, %s) semi-stub!\n", iface, dwFlags, pvReserved, ppAsmItem, debugstr_w(pszAssemblyName)); - return E_NOTIMPL; + if (!ppAsmItem) + return E_INVALIDARG; + + *ppAsmItem = NULL; + + item = HeapAlloc(GetProcessHeap(), 0, sizeof(IAssemblyCacheItemImpl)); + if (!item) + return E_OUTOFMEMORY; + + item->IAssemblyCacheItem_iface.lpVtbl = &AssemblyCacheItemVtbl; + item->ref = 1; + + *ppAsmItem = &item->IAssemblyCacheItem_iface; + return S_OK; } static HRESULT WINAPI IAssemblyCacheImpl_CreateAssemblyScavenger(IAssemblyCache *iface, @@ -560,12 +583,6 @@ HRESULT WINAPI CreateAssemblyCache(IAssemblyCache **ppAsmCache, DWORD dwReserved /* IAssemblyCacheItem */ -typedef struct { - IAssemblyCacheItem IAssemblyCacheItem_iface; - - LONG ref; -} IAssemblyCacheItemImpl; - static inline IAssemblyCacheItemImpl *impl_from_IAssemblyCacheItem(IAssemblyCacheItem *iface) { return CONTAINING_RECORD(iface, IAssemblyCacheItemImpl, IAssemblyCacheItem_iface);