From 0c6ab2464fec5c41a21e1a52d5d10eee5bc0a48f Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Mon, 21 May 2012 11:25:43 +0200 Subject: [PATCH] fusion: Add support for enumerating version 4.0 assemblies. --- dlls/fusion/asmenum.c | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/dlls/fusion/asmenum.c b/dlls/fusion/asmenum.c index 52229a8697f..e4f73e88b38 100644 --- a/dlls/fusion/asmenum.c +++ b/dlls/fusion/asmenum.c @@ -382,32 +382,50 @@ static HRESULT enum_gac_assemblies(struct list *assemblies, IAssemblyName *name, static HRESULT enumerate_gac(IAssemblyEnumImpl *asmenum, IAssemblyName *pName) { - WCHAR path[MAX_PATH]; - WCHAR buf[MAX_PATH]; + static const WCHAR gac[] = {'\\','G','A','C',0}; + static const WCHAR gac_32[] = {'\\','G','A','C','_','3','2',0}; + static const WCHAR gac_msil[] = {'\\','G','A','C','_','M','S','I','L',0}; + WCHAR path[MAX_PATH], buf[MAX_PATH]; HRESULT hr; DWORD size; - static WCHAR under32[] = {'_','3','2',0}; - static WCHAR msil[] = {'_','M','S','I','L',0}; + size = MAX_PATH; + hr = GetCachePath(ASM_CACHE_ROOT_EX, buf, &size); + if (FAILED(hr)) + return hr; + + strcpyW(path, buf); + strcpyW(path + size - 1, gac_32); + hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, path); + if (FAILED(hr)) + return hr; + + strcpyW(path, buf); + strcpyW(path + size - 1, gac_msil); + hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, path); + if (FAILED(hr)) + return hr; size = MAX_PATH; - hr = GetCachePath(ASM_CACHE_GAC, buf, &size); + hr = GetCachePath(ASM_CACHE_ROOT, buf, &size); if (FAILED(hr)) return hr; - lstrcpyW(path, buf); - lstrcatW(path, under32); + strcpyW(path, buf); + strcpyW(path + size - 1, gac_32); hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, path); if (FAILED(hr)) return hr; - lstrcpyW(path, buf); - lstrcatW(path, msil); + strcpyW(path, buf); + strcpyW(path + size - 1, gac_msil); hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, path); if (FAILED(hr)) return hr; - hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, buf); + strcpyW(path, buf); + strcpyW(path + size - 1, gac); + hr = enum_gac_assemblies(&asmenum->assemblies, pName, 0, path); if (FAILED(hr)) return hr;