[2/4] ole32: Implement GetConvertStg()
Nikolay Sivov
nsivov at codeweavers.com
Fri Jul 13 05:57:25 CDT 2012
Implement GetConvertStg()
-------------- next part --------------
>From 2a12003c43eadb434931ed42f2e163c1fa7ca932 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov at codeweavers.com>
Date: Fri, 13 Jul 2012 11:56:26 +0400
Subject: [PATCH 2/3] Implement GetConvertStg()
---
dlls/ole32/storage32.c | 36 +++++++++++++++++++++++++++++++++---
dlls/ole32/tests/storage32.c | 29 +++++++++++++++++++++++++++++
2 files changed, 62 insertions(+), 3 deletions(-)
diff --git a/dlls/ole32/storage32.c b/dlls/ole32/storage32.c
index 95850d1..47341f7 100644
--- a/dlls/ole32/storage32.c
+++ b/dlls/ole32/storage32.c
@@ -9400,12 +9400,42 @@ HRESULT WINAPI OleConvertIStorageToOLESTREAM (
return hRes;
}
+enum stream_1ole_flags {
+ OleStream_LinkedObject = 0x00000001,
+ OleStream_Convert = 0x00000100
+};
+
/***********************************************************************
* GetConvertStg (OLE32.@)
*/
-HRESULT WINAPI GetConvertStg(IStorage *stg) {
- FIXME("unimplemented stub!\n");
- return E_FAIL;
+HRESULT WINAPI GetConvertStg(IStorage *stg)
+{
+ static const WCHAR stream_1oleW[] = {1,'O','l','e',0};
+ static const DWORD version_magic = 0x02000001;
+ DWORD header[2];
+ IStream *stream;
+ HRESULT hr;
+ ULONG len;
+
+ TRACE("%p\n", stg);
+
+ if (!stg) return E_INVALIDARG;
+
+ hr = IStorage_OpenStream(stg, stream_1oleW, NULL, STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &stream);
+ if (FAILED(hr)) return hr;
+
+ len = 0;
+ hr = IStream_Read(stream, header, sizeof(header), &len);
+ IStream_Release(stream);
+ if (FAILED(hr)) return hr;
+
+ if (header[0] != version_magic)
+ {
+ ERR("got wrong version magic for \1Ole stream, 0x%08x\n", header[0]);
+ return E_FAIL;
+ }
+
+ return header[1] & OleStream_Convert ? S_OK : S_FALSE;
}
/******************************************************************************
diff --git a/dlls/ole32/tests/storage32.c b/dlls/ole32/tests/storage32.c
index bc0cc25..86b8d8e 100644
--- a/dlls/ole32/tests/storage32.c
+++ b/dlls/ole32/tests/storage32.c
@@ -2995,6 +2995,34 @@ static void test_hglobal_storage_creation(void)
ILockBytes_Release(ilb);
}
+static void test_convert(void)
+{
+ static const WCHAR filename[] = {'s','t','o','r','a','g','e','.','s','t','g',0};
+ IStorage *stg;
+ HRESULT hr;
+
+ hr = GetConvertStg(NULL);
+ ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+
+ hr = StgCreateDocfile( filename, STGM_CREATE | STGM_SHARE_EXCLUSIVE | STGM_READWRITE, 0, &stg);
+ ok(hr == S_OK, "StgCreateDocfile failed\n");
+ hr = GetConvertStg(stg);
+ ok(hr == STG_E_FILENOTFOUND, "got 0x%08x\n", hr);
+ hr = SetConvertStg(stg, TRUE);
+todo_wine {
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = GetConvertStg(stg);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = SetConvertStg(stg, FALSE);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ hr = GetConvertStg(stg);
+ ok(hr == S_FALSE, "got 0x%08x\n", hr);
+}
+ IStorage_Release(stg);
+
+ DeleteFileW(filename);
+}
+
START_TEST(storage32)
{
CHAR temp[MAX_PATH];
@@ -3038,4 +3066,5 @@ START_TEST(storage32)
test_copyto_locking();
test_copyto_recursive();
test_hglobal_storage_creation();
+ test_convert();
}
--
1.5.6.5
More information about the wine-patches
mailing list