Vincent Povirk : mscoree: Use the new Mono runtime search code in GetRequestedRuntimeInfo.

Alexandre Julliard julliard at winehq.org
Wed Oct 13 11:43:06 CDT 2010


Module: wine
Branch: master
Commit: 2c2d53024f04f785dbcccf309a28f3773d6c4233
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2c2d53024f04f785dbcccf309a28f3773d6c4233

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Fri Oct  1 14:11:09 2010 -0500

mscoree: Use the new Mono runtime search code in GetRequestedRuntimeInfo.

---

 dlls/mscoree/assembly.c        |    1 +
 dlls/mscoree/corruntimehost.c  |    1 +
 dlls/mscoree/metahost.c        |   48 ++++++++++++++++++++++++++++++++++++++++
 dlls/mscoree/mscoree_main.c    |   35 ++++++++++++++---------------
 dlls/mscoree/mscoree_private.h |    3 ++
 5 files changed, 70 insertions(+), 18 deletions(-)

diff --git a/dlls/mscoree/assembly.c b/dlls/mscoree/assembly.c
index b4b72d4..04e5d23 100644
--- a/dlls/mscoree/assembly.c
+++ b/dlls/mscoree/assembly.c
@@ -28,6 +28,7 @@
 #include "dbghelp.h"
 #include "ole2.h"
 #include "corhdr.h"
+#include "metahost.h"
 #include "mscoree_private.h"
 
 #include "wine/debug.h"
diff --git a/dlls/mscoree/corruntimehost.c b/dlls/mscoree/corruntimehost.c
index ee0ad44..831f6de 100644
--- a/dlls/mscoree/corruntimehost.c
+++ b/dlls/mscoree/corruntimehost.c
@@ -29,6 +29,7 @@
 
 #include "cor.h"
 #include "mscoree.h"
+#include "metahost.h"
 #include "mscoree_private.h"
 
 #include "wine/debug.h"
diff --git a/dlls/mscoree/metahost.c b/dlls/mscoree/metahost.c
index bf62f3c..57fce37 100644
--- a/dlls/mscoree/metahost.c
+++ b/dlls/mscoree/metahost.c
@@ -899,3 +899,51 @@ extern HRESULT CLRMetaHost_CreateInstance(REFIID riid, void **ppobj)
 {
     return ICLRMetaHost_QueryInterface((ICLRMetaHost*)&GlobalCLRMetaHost, riid, ppobj);
 }
+
+HRESULT get_runtime_info(LPCWSTR exefile, LPCWSTR version, LPCWSTR config_file,
+    DWORD startup_flags, DWORD runtimeinfo_flags, BOOL legacy, ICLRRuntimeInfo **result)
+{
+    static const DWORD supported_startup_flags = 0;
+    static const DWORD supported_runtime_flags = RUNTIME_INFO_UPGRADE_VERSION;
+    int i;
+
+    if (exefile)
+        FIXME("ignoring exe filename %s\n", debugstr_w(exefile));
+
+    if (config_file)
+        FIXME("ignoring config filename %s\n", debugstr_w(config_file));
+
+    if (startup_flags & ~supported_startup_flags)
+        FIXME("unsupported startup flags %x\n", startup_flags & ~supported_startup_flags);
+
+    if (runtimeinfo_flags & ~supported_runtime_flags)
+        FIXME("unsupported runtimeinfo flags %x\n", runtimeinfo_flags & ~supported_runtime_flags);
+
+    if (version)
+    {
+        return CLRMetaHost_GetRuntime(0, version, &IID_ICLRRuntimeInfo, (void**)result);
+    }
+
+    if (runtimeinfo_flags & RUNTIME_INFO_UPGRADE_VERSION)
+    {
+        find_runtimes();
+
+        if (legacy)
+            i = 2;
+        else
+            i = NUM_RUNTIMES;
+
+        while (i--)
+        {
+            if (runtimes[i].mono_abi_version)
+                return IUnknown_QueryInterface((IUnknown*)&runtimes[i],
+                    &IID_ICLRRuntimeInfo, (void**)result);
+        }
+
+        ERR("No %s.NET runtime installed\n", legacy ? "legacy " : "");
+
+        return CLR_E_SHIM_RUNTIME;
+    }
+
+    return CLR_E_SHIM_RUNTIME;
+}
diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c
index fe7c35b..a57d766 100644
--- a/dlls/mscoree/mscoree_main.c
+++ b/dlls/mscoree/mscoree_main.c
@@ -21,6 +21,7 @@
 
 #include <stdarg.h>
 
+#define COBJMACROS
 #include "wine/unicode.h"
 #include "wine/library.h"
 #include "windef.h"
@@ -516,35 +517,33 @@ HRESULT WINAPI GetRequestedRuntimeInfo(LPCWSTR pExe, LPCWSTR pwszVersion, LPCWST
     LPWSTR pVersion, DWORD cchBuffer, DWORD *dwlength)
 {
     HRESULT ret;
-    DWORD ver_len, dir_len;
-    WCHAR dirW[MAX_PATH], verW[MAX_PATH];
+    ICLRRuntimeInfo *info;
+    DWORD length_dummy;
 
-    FIXME("(%s, %s, %s, 0x%08x, 0x%08x, %p, 0x%08x, %p, %p, 0x%08x, %p) semi-stub\n", debugstr_w(pExe),
+    TRACE("(%s, %s, %s, 0x%08x, 0x%08x, %p, 0x%08x, %p, %p, 0x%08x, %p)\n", debugstr_w(pExe),
           debugstr_w(pwszVersion), debugstr_w(pConfigurationFile), startupFlags, runtimeInfoFlags, pDirectory,
           dwDirectory, dwDirectoryLength, pVersion, cchBuffer, dwlength);
 
-    if (!pwszVersion && !(runtimeInfoFlags & RUNTIME_INFO_UPGRADE_VERSION))
-        return CLR_E_SHIM_RUNTIME;
+    if (!dwDirectoryLength) dwDirectoryLength = &length_dummy;
 
-    ret = GetCORSystemDirectory(dirW, dwDirectory, &dir_len);
+    if (!dwlength) dwlength = &length_dummy;
 
-    if (ret == S_OK)
-    {
-        if (dwDirectoryLength)
-            *dwDirectoryLength = dir_len;
-        if (pDirectory)
-            lstrcpyW(pDirectory, dirW);
+    ret = get_runtime_info(pExe, pwszVersion, pConfigurationFile, startupFlags, runtimeInfoFlags, TRUE, &info);
 
-        ret = GetCORVersion(verW, cchBuffer, &ver_len);
+    if (SUCCEEDED(ret))
+    {
+        *dwlength = cchBuffer;
+        ret = ICLRRuntimeInfo_GetVersionString(info, pVersion, dwlength);
 
-        if (ret == S_OK)
+        if (SUCCEEDED(ret))
         {
-            if (dwlength)
-                *dwlength = ver_len;
-            if (pVersion)
-                lstrcpyW(pVersion, verW);
+            *dwDirectoryLength = dwDirectory;
+            ret = ICLRRuntimeInfo_GetRuntimeDirectory(info, pDirectory, dwDirectoryLength);
         }
+
+        ICLRRuntimeInfo_Release(info);
     }
+
     return ret;
 }
 
diff --git a/dlls/mscoree/mscoree_private.h b/dlls/mscoree/mscoree_private.h
index 8604c81..6273b82 100644
--- a/dlls/mscoree/mscoree_private.h
+++ b/dlls/mscoree/mscoree_private.h
@@ -45,6 +45,9 @@ typedef struct CLRRuntimeInfo
     struct RuntimeHost *loaded_runtime;
 } CLRRuntimeInfo;
 
+extern HRESULT get_runtime_info(LPCWSTR exefile, LPCWSTR version, LPCWSTR config_file,
+    DWORD startup_flags, DWORD runtimeinfo_flags, BOOL legacy, ICLRRuntimeInfo **result);
+
 /* Mono 2.6 embedding */
 typedef struct _MonoDomain MonoDomain;
 typedef struct _MonoAssembly MonoAssembly;




More information about the wine-cvs mailing list