Daniel Jelinski : mscoree: Extract a helper function for getting file name from assembly.
Alexandre Julliard
julliard at winehq.org
Wed Jun 5 13:47:03 CDT 2013
Module: wine
Branch: master
Commit: 0eaa3ec9fb1609f0a0b0bb703b47e65071d4d49e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0eaa3ec9fb1609f0a0b0bb703b47e65071d4d49e
Author: Daniel Jelinski <djelinski1 at gmail.com>
Date: Tue Jun 4 21:10:27 2013 +0200
mscoree: Extract a helper function for getting file name from assembly.
---
dlls/mscoree/metahost.c | 74 ++++++++++++++++++++++------------------
dlls/mscoree/mscoree_private.h | 2 +
2 files changed, 43 insertions(+), 33 deletions(-)
diff --git a/dlls/mscoree/metahost.c b/dlls/mscoree/metahost.c
index fe529fd..eabdcf5 100644
--- a/dlls/mscoree/metahost.c
+++ b/dlls/mscoree/metahost.c
@@ -1210,31 +1210,15 @@ HRESULT CLRMetaHost_CreateInstance(REFIID riid, void **ppobj)
return ICLRMetaHost_QueryInterface(&GlobalCLRMetaHost.ICLRMetaHost_iface, riid, ppobj);
}
-static MonoAssembly* mono_assembly_search_hook_fn(MonoAssemblyName *aname, char **assemblies_path, void *user_data)
+HRESULT get_file_from_strongname(WCHAR* stringnameW, WCHAR* assemblies_path, int path_length)
{
- loaded_mono *mono = user_data;
HRESULT hr=S_OK;
- MonoAssembly *result=NULL;
- char *stringname=NULL;
- LPWSTR stringnameW;
- int stringnameW_size;
IAssemblyCache *asmcache;
ASSEMBLY_INFO info;
- WCHAR path[MAX_PATH];
- char *pathA;
- MonoImageOpenStatus stat;
static WCHAR fusiondll[] = {'f','u','s','i','o','n',0};
HMODULE hfusion=NULL;
static HRESULT (WINAPI *pCreateAssemblyCache)(IAssemblyCache**,DWORD);
- stringname = mono->mono_stringify_assembly_name(aname);
-
- TRACE("%s\n", debugstr_a(stringname));
-
- if (!stringname) return NULL;
-
- /* FIXME: We should search the given paths before the GAC. */
-
if (!pCreateAssemblyCache)
{
hr = LoadLibraryShim(fusiondll, NULL, NULL, &hfusion);
@@ -1252,28 +1236,52 @@ static MonoAssembly* mono_assembly_search_hook_fn(MonoAssemblyName *aname, char
if (SUCCEEDED(hr))
{
- stringnameW_size = MultiByteToWideChar(CP_UTF8, 0, stringname, -1, NULL, 0);
+ info.cbAssemblyInfo = sizeof(info);
+ info.pszCurrentAssemblyPathBuf = assemblies_path;
+ info.cchBuf = path_length;
+ assemblies_path[0] = 0;
- stringnameW = HeapAlloc(GetProcessHeap(), 0, stringnameW_size * sizeof(WCHAR));
- if (stringnameW)
- MultiByteToWideChar(CP_UTF8, 0, stringname, -1, stringnameW, stringnameW_size);
- else
- hr = E_OUTOFMEMORY;
+ hr = IAssemblyCache_QueryAssemblyInfo(asmcache, 0, stringnameW, &info);
- if (SUCCEEDED(hr))
- {
- info.cbAssemblyInfo = sizeof(info);
- info.pszCurrentAssemblyPathBuf = path;
- info.cchBuf = MAX_PATH;
- path[0] = 0;
+ IAssemblyCache_Release(asmcache);
+ }
- hr = IAssemblyCache_QueryAssemblyInfo(asmcache, 0, stringnameW, &info);
- }
+ return hr;
+}
- HeapFree(GetProcessHeap(), 0, stringnameW);
+static MonoAssembly* mono_assembly_search_hook_fn(MonoAssemblyName *aname, char **assemblies_path, void *user_data)
+{
+ loaded_mono *mono = user_data;
+ HRESULT hr;
+ MonoAssembly *result=NULL;
+ char *stringname=NULL;
+ LPWSTR stringnameW;
+ int stringnameW_size;
+ WCHAR path[MAX_PATH];
+ char *pathA;
+ MonoImageOpenStatus stat;
- IAssemblyCache_Release(asmcache);
+ stringname = mono->mono_stringify_assembly_name(aname);
+
+ TRACE("%s\n", debugstr_a(stringname));
+
+ if (!stringname) return NULL;
+
+ /* FIXME: We should search the given paths before the GAC. */
+
+ stringnameW_size = MultiByteToWideChar(CP_UTF8, 0, stringname, -1, NULL, 0);
+
+ stringnameW = HeapAlloc(GetProcessHeap(), 0, stringnameW_size * sizeof(WCHAR));
+ if (stringnameW)
+ {
+ MultiByteToWideChar(CP_UTF8, 0, stringname, -1, stringnameW, stringnameW_size);
+
+ hr = get_file_from_strongname(stringnameW, path, MAX_PATH);
+
+ HeapFree(GetProcessHeap(), 0, stringnameW);
}
+ else
+ hr = E_OUTOFMEMORY;
if (SUCCEEDED(hr))
{
diff --git a/dlls/mscoree/mscoree_private.h b/dlls/mscoree/mscoree_private.h
index 4677921..b66669c 100644
--- a/dlls/mscoree/mscoree_private.h
+++ b/dlls/mscoree/mscoree_private.h
@@ -204,6 +204,8 @@ extern HRESULT CorDebug_Create(ICLRRuntimeHost *runtimehost, IUnknown** ppUnk) D
extern HRESULT create_monodata(REFIID riid, LPVOID *ppObj) DECLSPEC_HIDDEN;
+extern HRESULT get_file_from_strongname(WCHAR* stringnameW, WCHAR* assemblies_path, int path_length) DECLSPEC_HIDDEN;
+
extern void runtimehost_init(void);
extern void runtimehost_uninit(void);
More information about the wine-cvs
mailing list