[2/2] mscoree: Implement CreateConfigStream (try 3)
André Hentschel
nerv at dawncrow.de
Wed May 18 13:19:45 CDT 2011
---
dlls/mscoree/mscoree_main.c | 28 ++++++++++++++++++++++++++--
dlls/mscoree/tests/mscoree.c | 14 +++++++-------
2 files changed, 33 insertions(+), 9 deletions(-)
diff --git a/dlls/mscoree/mscoree_main.c b/dlls/mscoree/mscoree_main.c
index 6fe32d2..17933a4 100644
--- a/dlls/mscoree/mscoree_main.c
+++ b/dlls/mscoree/mscoree_main.c
@@ -440,8 +440,32 @@ BOOL WINAPI StrongNameSignatureVerificationEx(LPCWSTR filename, BOOL forceVerifi
HRESULT WINAPI CreateConfigStream(LPCWSTR filename, IStream **stream)
{
- FIXME("(%s, %p): stub\n", debugstr_w(filename), stream);
- return E_NOTIMPL;
+ HANDLE hfile;
+ HGLOBAL hglobal;
+ LPVOID ptr;
+ HRESULT ret;
+ DWORD filesize, read;
+
+ TRACE("(%s, %p)\n", debugstr_w(filename), stream);
+
+ if (!stream) return COR_E_NULLREFERENCE;
+ if (!filename) return E_FAIL;
+
+ hfile = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ, NULL,
+ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ if (hfile == INVALID_HANDLE_VALUE) return COR_E_FILENOTFOUND;
+ filesize = GetFileSize(hfile, NULL);
+
+ hglobal = GlobalAlloc(GHND, filesize);
+ ptr = GlobalLock(hglobal);
+
+ ReadFile(hfile, ptr, filesize, &read, NULL);
+ CloseHandle(hfile);
+
+ ret = CreateStreamOnHGlobal(hglobal, TRUE, stream);
+
+ GlobalUnlock(hglobal);
+ return ret;
}
HRESULT WINAPI CreateDebuggingInterfaceFromVersion(int nDebugVersion, LPCWSTR version, IUnknown **ppIUnk)
diff --git a/dlls/mscoree/tests/mscoree.c b/dlls/mscoree/tests/mscoree.c
index 308db41..04156a3 100644
--- a/dlls/mscoree/tests/mscoree.c
+++ b/dlls/mscoree/tests/mscoree.c
@@ -287,22 +287,22 @@ static void test_createconfigstream(void)
GetFullPathNameW(file, MAX_PATH, path, NULL);
hr = pCreateConfigStream(NULL, &stream);
- todo_wine ok(hr == E_FAIL || broken(hr == ERROR_PROC_NOT_FOUND), /* some WinXP, Win2K3 and Win7 */
- "CreateConfigStream returned %x\n", hr);
+ ok(hr == E_FAIL || broken(hr == ERROR_PROC_NOT_FOUND), /* some WinXP, Win2K3 and Win7 */
+ "CreateConfigStream returned %x\n", hr);
hr = pCreateConfigStream(path, NULL);
- todo_wine ok(hr == COR_E_NULLREFERENCE, "CreateConfigStream returned %x\n", hr);
+ ok(hr == COR_E_NULLREFERENCE, "CreateConfigStream returned %x\n", hr);
hr = pCreateConfigStream(NULL, NULL);
- todo_wine ok(hr == COR_E_NULLREFERENCE, "CreateConfigStream returned %x\n", hr);
+ ok(hr == COR_E_NULLREFERENCE, "CreateConfigStream returned %x\n", hr);
hr = pCreateConfigStream(nonexistent, &stream);
- todo_wine ok(hr == COR_E_FILENOTFOUND, "CreateConfigStream returned %x\n", hr);
+ ok(hr == COR_E_FILENOTFOUND, "CreateConfigStream returned %x\n", hr);
ok(stream == NULL, "Expected stream to be NULL\n");
hr = pCreateConfigStream(path, &stream);
- todo_wine ok(hr == S_OK, "CreateConfigStream failed, hr=%x\n", hr);
- todo_wine ok(stream != NULL, "Expected non-NULL stream\n");
+ ok(hr == S_OK, "CreateConfigStream failed, hr=%x\n", hr);
+ ok(stream != NULL, "Expected non-NULL stream\n");
if (stream)
{
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list