static HRESULT RuntimeHost_GetDefaultDomain(RuntimeHost *This, MonoDomain **result) { HRESULT res=S_OK; EnterCriticalSection(&This->lock); if (This->default_domain) goto end; res = RuntimeHost_AddDomain(This, &This->default_domain); end: *result = This->default_domain; LeaveCriticalSection(&This->lock); return res; }
static HRESULT RuntimeHost_GetDefaultDomain(RuntimeHost *This, const WCHAR *config_path, MonoDomain **result) { WCHAR config_dir[MAX_PATH]; WCHAR base_dir[MAX_PATH]; char *base_dirA, *config_pathA, *slash; HRESULT res=S_OK; EnterCriticalSection(&This->lock); if (This->default_domain) goto end; res = RuntimeHost_AddDomain(This, &This->default_domain); if (!config_path) { DWORD len = sizeof(config_dir)/sizeof(*config_dir); static const WCHAR machine_configW[] = {'\\','C','O','N','F','I','G','\\','m','a','c','h','i','n','e','.','c','o','n','f','i','g',0}; res = ICLRRuntimeInfo_GetRuntimeDirectory(&This->version->ICLRRuntimeInfo_iface, config_dir, &len); if (FAILED(res)) goto end; lstrcatW(config_dir, machine_configW); config_path = config_dir; } config_pathA = WtoA(config_path); if (!config_pathA) { res = E_OUTOFMEMORY; goto end; } GetModuleFileNameW(NULL, base_dir, sizeof(base_dir) / sizeof(*base_dir)); base_dirA = WtoA(base_dir); if (!base_dirA) { HeapFree(GetProcessHeap(), 0, config_pathA); res = E_OUTOFMEMORY; goto end; } slash = strrchr(base_dirA, '\\'); if (slash) *slash = 0; TRACE("setting base_dir: %s, config_path: %s\n", base_dirA, config_pathA); mono_domain_set_config(This->default_domain, base_dirA, config_pathA); HeapFree(GetProcessHeap(), 0, config_pathA); HeapFree(GetProcessHeap(), 0, base_dirA); end: *result = This->default_domain; LeaveCriticalSection(&This->lock); return res; }