From 3139b927b20bd9728eb9623e8c6bd95fd41d3c36 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 4 Oct 2002 17:42:27 +0000 Subject: [PATCH] Added a prototype code page test. Fixed issue regarding negative source length handling. --- dlls/kernel/tests/.cvsignore | 1 + dlls/kernel/tests/Makefile.in | 1 + dlls/kernel/tests/codepage.c | 47 +++++++++++++++++++++++++++++++++++++++++++ memory/codepage.c | 4 ++-- 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 dlls/kernel/tests/codepage.c diff --git a/dlls/kernel/tests/.cvsignore b/dlls/kernel/tests/.cvsignore index 80f2cb51950..d00a2702d6d 100644 --- a/dlls/kernel/tests/.cvsignore +++ b/dlls/kernel/tests/.cvsignore @@ -1,6 +1,7 @@ Makefile alloc.ok atom.ok +codepage.ok directory.ok drive.ok environ.ok diff --git a/dlls/kernel/tests/Makefile.in b/dlls/kernel/tests/Makefile.in index bcc84ad11a9..bf933b07c77 100644 --- a/dlls/kernel/tests/Makefile.in +++ b/dlls/kernel/tests/Makefile.in @@ -8,6 +8,7 @@ IMPORTS = kernel32 CTESTS = \ alloc.c \ atom.c \ + codepage.c \ directory.c \ drive.c \ environ.c \ diff --git a/dlls/kernel/tests/codepage.c b/dlls/kernel/tests/codepage.c new file mode 100644 index 00000000000..7ffa3ee2b6a --- /dev/null +++ b/dlls/kernel/tests/codepage.c @@ -0,0 +1,47 @@ +/* + * Unit tests for code page to/from unicode translations + * + * Copyright (c) 2002 Dmitry Timoshkov + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "wine/test.h" +#include "winbase.h" +#include "winnls.h" + +static void test_negative_source_length(void) +{ + int len; + char buf[10]; + WCHAR bufW[10]; + static const WCHAR foobarW[] = {'f','o','o','b','a','r',0}; + + /* Test, whether any negative source length works as strlen() + 1 */ + SetLastError( 0xdeadbeef ); + len = WideCharToMultiByte(CP_ACP, 0, foobarW, -2002, buf, 10, NULL, NULL); + ok(len == 7 && !lstrcmpA(buf, "foobar") && GetLastError() == 0xdeadbeef, + "any negative value should work as strlen() + 1"); + + SetLastError( 0xdeadbeef ); + len = MultiByteToWideChar(CP_ACP, 0, "foobar", -2002, bufW, 10); + ok(len == 7 && !lstrcmpW(bufW, foobarW) && GetLastError() == 0xdeadbeef, + "any negative value should work as strlen() + 1"); +} + +START_TEST(codepage) +{ + test_negative_source_length(); +} diff --git a/memory/codepage.c b/memory/codepage.c index a8f21e64ad7..c1205f96a98 100644 --- a/memory/codepage.c +++ b/memory/codepage.c @@ -311,7 +311,7 @@ INT WINAPI MultiByteToWideChar( UINT page, DWORD flags, LPCSTR src, INT srclen, return 0; } - if (srclen == -1) srclen = strlen(src) + 1; + if (srclen < 0) srclen = strlen(src) + 1; if (flags & MB_USEGLYPHCHARS) FIXME("MB_USEGLYPHCHARS not supported\n"); @@ -386,7 +386,7 @@ INT WINAPI WideCharToMultiByte( UINT page, DWORD flags, LPCWSTR src, INT srclen, return 0; } - if (srclen == -1) srclen = strlenW(src) + 1; + if (srclen < 0) srclen = strlenW(src) + 1; switch(page) { -- 2.11.4.GIT