El 10/11/10 15:02, André Hentschel escribió:
That's the behaviour of XP and up:
http://test.winehq.org/data/tests/oledb32:convert.html
It's tricky to fix in Wine as you really don't know how much space you have in
dst and assuming space breaks other tests.
---
dlls/oledb32/tests/convert.c | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c
index b9ef71f..cdae859 100644
--- a/dlls/oledb32/tests/convert.c
+++ b/dlls/oledb32/tests/convert.c
@@ -1469,10 +1469,15 @@ static void test_converttostr(void)
memset(dst, 0xcc, sizeof(dst));
dst_len = 0x1234;
hr = IDataConvert_DataConvert(convert, DBTYPE_I2, DBTYPE_STR, 0,&dst_len,
src, dst, 0, 0,&dst_status, 0, 0, 0);
- ok(hr == DB_E_ERRORSOCCURRED, "got %08x\n", hr);
- ok(dst_status == DBSTATUS_E_DATAOVERFLOW, "got %08x\n", dst_status);
+ todo_wine ok(hr == S_OK ||
+ broken(hr == DB_E_ERRORSOCCURRED /* Win9x, WinMe, NT4 and 2k
*/),
+ "got %08x\n", hr);
+ todo_wine ok(dst_status == DBSTATUS_S_OK ||
+ broken(dst_status == DBSTATUS_E_DATAOVERFLOW /* Win9x, WinMe,
NT4 and 2k */),
+ "got %08x\n", dst_status);
ok(dst_len == 4, "got %d\n", dst_len);
- ok(dst[0] == (char)0xcc, "got %02x\n", dst[0]);
+ todo_wine ok(dst[0] == '4' ||
+ broken(dst[0] == (char)0xcc /* Win9x, WinMe, NT4 and 2k */), "got
%02x\n", dst[0]);
*(short *)src = 4321;
memset(dst, 0xcc, sizeof(dst));
Weird. When I wrote that test, the WinXP-SP2 virtual machine did return
DB_E_ERRORSOCCURRED/DBSTATUS_E_DATAOVERFLOW on this condition (available
space equal to zero), and did not touch the output buffer in the
process. In my opinion, Win9x behavior is actually OK, and the behavior
you observe is the one that should be flagged as broken. It is hard to
imagine the newer behavior (apparently "assume unbounded output buffer
if reported space is zero") as more correct than the Win9x behavior. I
think this should be treated the same as your 1/2 patch, which flags the
behavior as Vista-only brokenness.