Commit fb0fa9aa authored by Martin Storsjo's avatar Martin Storsjo Committed by Alexandre Julliard

msvcrt: Fix reading BOM-less files opened with ccs=unicode.

This fixes a regression in running MSVC 2010 in wine, when reading .def files (regressed in b0ab1b76). Signed-off-by: 's avatarMartin Storsjo <martin@martin.st> Signed-off-by: 's avatarPiotr Caban <piotr@codeweavers.com> Signed-off-by: 's avatarAlexandre Julliard <julliard@winehq.org>
parent 5ebc20c6
......@@ -2329,6 +2329,7 @@ int CDECL _wsopen_dispatch( const wchar_t* path, int oflags, int shflags, int pm
msvcrt_set_errno(GetLastError());
return *_errno();
}
oflags |= _O_U16TEXT;
}
}
else if (access & GENERIC_READ)
......@@ -2346,8 +2347,9 @@ int CDECL _wsopen_dispatch( const wchar_t* path, int oflags, int shflags, int pm
return *_errno();
if (oflags & _O_WTEXT)
get_ioinfo_nolock(*fd)->exflag |= EF_UTF16|EF_UNK_UNICODE;
else if (oflags & _O_U16TEXT)
get_ioinfo_nolock(*fd)->exflag |= EF_UNK_UNICODE;
if (oflags & _O_U16TEXT)
get_ioinfo_nolock(*fd)->exflag |= EF_UTF16;
else if (oflags & _O_U8TEXT)
get_ioinfo_nolock(*fd)->exflag |= EF_UTF8;
......
......@@ -1039,6 +1039,40 @@ static void test_fgetwc_unicode(void)
ch = fgetwc(tempfh);
ok(ch == WEOF, "got %04hx, expected WEOF (unicode)\n", ch);
fclose(tempfh);
tempfh = fopen(tempfile, "wb");
ok(tempfh != NULL, "can't open tempfile\n");
ret = WideCharToMultiByte(CP_UTF8, 0, wchar_text + 1, ARRAY_SIZE(wchar_text) - 1,
utf8_text, sizeof(utf8_text), NULL, NULL);
ok(ret > 0, "utf-8 conversion failed\n");
utf8_text[ret] = 0;
fwrite(utf8_text, sizeof(char), ret, tempfh);
fclose(tempfh);
tempfh = fopen(tempfile, "rt, ccs=UTF-8");
ok(tempfh != NULL, "can't open tempfile\n");
for (i = 1; i < ARRAY_SIZE(wchar_text); i++)
{
ch = fgetwc(tempfh);
ok(ch == wchar_text[i],
"got %04hx, expected %04x (utf8[%d])\n", ch, wchar_text[i], i-1);
}
ch = fgetwc(tempfh);
ok(ch == WEOF, "got %04hx, expected WEOF (utf8)\n", ch);
fclose(tempfh);
tempfh = fopen(tempfile, "rt, ccs=unicode");
ok(tempfh != NULL, "can't open tempfile\n");
for (i = 0; utf8_text[i]; i++)
{
ch = fgetwc(tempfh);
ok(ch == (unsigned char) utf8_text[i],
"got %04hx, expected %04x (unicode[%d])\n", ch, (unsigned char)utf8_text[i], i);
}
ch = fgetwc(tempfh);
ok(ch == WEOF, "got %04hx, expected WEOF (unicode)\n", ch);
fclose(tempfh);
unlink(temppath);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment