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