Module: wine Branch: master Commit: bf70fe3611c2b655c28d6afc7ff0afd8ccb49e59 URL: http://source.winehq.org/git/wine.git/?a=commit;h=bf70fe3611c2b655c28d6afc7f...
Author: André Hentschel nerv@dawncrow.de Date: Sun Nov 30 13:15:45 2014 +0100
fusion: Add implementation for CreateAssemblyCacheItem.
---
dlls/fusion/asmcache.c | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-)
diff --git a/dlls/fusion/asmcache.c b/dlls/fusion/asmcache.c index 9125655..dd84d38 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);