[PATCH v2] msvcrt/tests: Add tests for mbstowcs and wcstombs with a negative count.
Alex Henrie
alexhenrie24 at gmail.com
Mon Jun 13 23:16:39 CDT 2016
Cc: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
dlls/msvcrt/tests/string.c | 37 ++++++++++++++++++++++++++++++++-----
1 file changed, 32 insertions(+), 5 deletions(-)
diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c
index 8e78695..1a050cc 100644
--- a/dlls/msvcrt/tests/string.c
+++ b/dlls/msvcrt/tests/string.c
@@ -1837,16 +1837,13 @@ static void test_mbstowcs(void)
static const char mHiragana[] = { 0x82,0xa0,0x82,0xa1,0 };
const wchar_t *pwstr;
- wchar_t wOut[6];
- char mOut[6];
+ wchar_t wOut[8] = { '!','!','!','!','!','!','!',0 };
+ char mOut[8] = "!!!!!!!";
size_t ret;
int err;
const char *pmbstr;
mbstate_t state;
- wOut[4] = '!'; wOut[5] = '\0';
- mOut[4] = '!'; mOut[5] = '\0';
-
if(pmbstowcs_s) {
/* crashes on some systems */
errno = 0xdeadbeef;
@@ -1858,6 +1855,24 @@ static void test_mbstowcs(void)
ret = mbstowcs(NULL, mSimple, 0);
ok(ret == 4, "mbstowcs did not return 4\n");
+ ret = mbstowcs(wOut, mSimple, -1);
+todo_wine
+ ok(ret == 4 || broken(ret == -1) /* vista and later */, "mbstowcs did not return 4\n");
+todo_wine
+ ok(!memcmp(wOut, wSimple, 5*sizeof(wchar_t)) || broken(wOut[0] == 0),
+ "wOut = %s\n", wine_dbgstr_w(wOut));
+ ok(wOut[5] == '!', "wOut[5] != \'!\'\n");
+
+ wOut[0] = '!'; wOut[1] = '!'; wOut[2] = '!'; wOut[3] = '!'; wOut[4] = '!'; wOut[5] = '!';
+ ret = mbstowcs(wOut, mSimple, -1000);
+todo_wine
+ ok(ret == 4 || broken(ret == -1) /* vista and later */, "mbstowcs did not return 4\n");
+todo_wine
+ ok(!memcmp(wOut, wSimple, 5*sizeof(wchar_t)) || broken(wOut[0] == 0),
+ "wOut = %s\n", wine_dbgstr_w(wOut));
+ ok(wOut[5] == '!', "wOut[5] != \'!\'\n");
+
+ wOut[0] = '!'; wOut[1] = '!'; wOut[2] = '!'; wOut[3] = '!'; wOut[4] = '!'; wOut[5] = '!';
ret = mbstowcs(wOut, mSimple, 4);
ok(ret == 4, "mbstowcs did not return 4\n");
ok(!memcmp(wOut, wSimple, 4*sizeof(wchar_t)), "wOut = %s\n", wine_dbgstr_w(wOut));
@@ -1866,6 +1881,18 @@ static void test_mbstowcs(void)
ret = wcstombs(NULL, wSimple, 0);
ok(ret == 4, "wcstombs did not return 4\n");
+ ret = wcstombs(mOut, wSimple, -1);
+ ok(ret == 4 || broken(ret == -1) /* vista and later */, "wcstombs did not return 4\n");
+ ok(!memcmp(mOut, mSimple, 5*sizeof(char)) || broken(mOut[0] == '!'), "mOut = %s\n", mOut);
+ ok(mOut[5] == '!', "mOut[5] != \'!\'\n");
+
+ memset(mOut, '!', 6*sizeof(char));
+ ret = wcstombs(mOut, wSimple, -1000);
+ ok(ret == 4 || broken(ret == -1) /* vista and later */, "wcstombs did not return 4\n");
+ ok(!memcmp(mOut, mSimple, 5*sizeof(char)) || broken(mOut[0] == '!'), "mOut = %s\n", mOut);
+ ok(mOut[5] == '!', "mOut[5] != \'!\'\n");
+
+ memset(mOut, '!', 6*sizeof(char));
ret = wcstombs(mOut, wSimple, 6);
ok(ret == 4, "wcstombs did not return 4\n");
ok(!memcmp(mOut, mSimple, 5*sizeof(char)), "mOut = %s\n", mOut);
--
2.8.3
More information about the wine-patches
mailing list