Vincent Povirk : mscoree: Use the new search methods for GetCORVersion/ GetCORSystemDirectory.
Alexandre Julliard
julliard at winehq.org
Tue Nov 9 13:13:24 CST 2010
Module: wine
Branch: master
Commit: 84ef0fca574639efcb6fe35bd624feb1ed7ae510
URL: http://source.winehq.org/git/wine.git/?a=commit;h=84ef0fca574639efcb6fe35bd624feb1ed7ae510
Author: Vincent Povirk <vincent at codeweavers.com>
Date: Fri Oct 1 14:18:12 2010 -0500
mscoree: Use the new search methods for GetCORVersion/GetCORSystemDirectory.
---
dlls/mscoree/mscoree_main.c | 50 +++++++++++++++++------------------------
dlls/mscoree/tests/mscoree.c | 8 ++++++
2 files changed, 29 insertions(+), 29 deletions(-)
diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c
index 9c91112..d2d7445 100644
--- a/dlls/mscoree/mscoree_main.c
+++ b/dlls/mscoree/mscoree_main.c
@@ -460,56 +460,48 @@ HRESULT WINAPI _CorValidateImage(PVOID* imageBase, LPCWSTR imageName)
HRESULT WINAPI GetCORSystemDirectory(LPWSTR pbuffer, DWORD cchBuffer, DWORD *dwLength)
{
- static const WCHAR slash[] = {'\\',0};
- WCHAR system_dir[MAX_PATH];
- WCHAR version[MAX_PATH];
+ ICLRRuntimeInfo *info;
+ HRESULT ret;
- FIXME("(%p, %d, %p): semi-stub!\n", pbuffer, cchBuffer, dwLength);
+ TRACE("(%p, %d, %p)!\n", pbuffer, cchBuffer, dwLength);
- if (!dwLength)
+ if (!dwLength || !pbuffer)
return E_POINTER;
- if (!pbuffer)
- return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
+ ret = get_runtime_info(NULL, NULL, NULL, 0, RUNTIME_INFO_UPGRADE_VERSION, TRUE, &info);
- if (!get_install_root(system_dir))
- {
- ERR("error reading registry key for installroot, returning empty path\n");
- *dwLength = 0;
- }
- else
+ if (SUCCEEDED(ret))
{
- GetCORVersion(version, MAX_PATH, dwLength);
- lstrcatW(system_dir, version);
- lstrcatW(system_dir, slash);
- *dwLength = lstrlenW(system_dir) + 1;
+ *dwLength = cchBuffer;
+ ret = ICLRRuntimeInfo_GetRuntimeDirectory(info, pbuffer, dwLength);
- if (cchBuffer < *dwLength)
- return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
-
- lstrcpyW(pbuffer, system_dir);
+ ICLRRuntimeInfo_Release(info);
}
- return S_OK;
+ return ret;
}
HRESULT WINAPI GetCORVersion(LPWSTR pbuffer, DWORD cchBuffer, DWORD *dwLength)
{
- static const WCHAR version[] = {'v','2','.','0','.','5','0','7','2','7',0};
+ ICLRRuntimeInfo *info;
+ HRESULT ret;
- FIXME("(%p, %d, %p): semi-stub!\n", pbuffer, cchBuffer, dwLength);
+ TRACE("(%p, %d, %p)!\n", pbuffer, cchBuffer, dwLength);
if (!dwLength || !pbuffer)
return E_POINTER;
- *dwLength = lstrlenW(version) + 1;
+ ret = get_runtime_info(NULL, NULL, NULL, 0, RUNTIME_INFO_UPGRADE_VERSION, TRUE, &info);
- if (cchBuffer < *dwLength)
- return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
+ if (SUCCEEDED(ret))
+ {
+ *dwLength = cchBuffer;
+ ret = ICLRRuntimeInfo_GetVersionString(info, pbuffer, dwLength);
- lstrcpyW(pbuffer, version);
+ ICLRRuntimeInfo_Release(info);
+ }
- return S_OK;
+ return ret;
}
HRESULT WINAPI GetRequestedRuntimeInfo(LPCWSTR pExe, LPCWSTR pwszVersion, LPCWSTR pConfigurationFile,
diff --git a/dlls/mscoree/tests/mscoree.c b/dlls/mscoree/tests/mscoree.c
index 6426ac6..1b3cd77 100644
--- a/dlls/mscoree/tests/mscoree.c
+++ b/dlls/mscoree/tests/mscoree.c
@@ -87,6 +87,14 @@ static void test_versioninfo(void)
}
hr = pGetCORVersion(version, 1, &size);
+ if (hr == CLR_E_SHIM_RUNTIME)
+ {
+ /* FIXME: Get Mono packaged properly so we can fail here. */
+ todo_wine ok(hr == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER),"GetCORVersion returned %08x\n", hr);
+ skip("No .NET runtimes are installed\n");
+ return;
+ }
+
ok(hr == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER),"GetCORVersion returned %08x\n", hr);
hr = pGetCORVersion(version, MAX_PATH, &size);
More information about the wine-cvs
mailing list