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 inb0ab1b7602
). Signed-off-by: Martin Storsjo <martin@martin.st> Signed-off-by: Piotr Caban <piotr@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org> (cherry picked from commitfb0fa9aacf
) Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
This commit is contained in:
parent
5faad354d8
commit
be1c8a56a3
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue