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());
|
msvcrt_set_errno(GetLastError());
|
||||||
return *_errno();
|
return *_errno();
|
||||||
}
|
}
|
||||||
|
oflags |= _O_U16TEXT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (access & GENERIC_READ)
|
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();
|
return *_errno();
|
||||||
|
|
||||||
if (oflags & _O_WTEXT)
|
if (oflags & _O_WTEXT)
|
||||||
get_ioinfo_nolock(*fd)->exflag |= EF_UTF16|EF_UNK_UNICODE;
|
get_ioinfo_nolock(*fd)->exflag |= EF_UNK_UNICODE;
|
||||||
else if (oflags & _O_U16TEXT)
|
|
||||||
|
if (oflags & _O_U16TEXT)
|
||||||
get_ioinfo_nolock(*fd)->exflag |= EF_UTF16;
|
get_ioinfo_nolock(*fd)->exflag |= EF_UTF16;
|
||||||
else if (oflags & _O_U8TEXT)
|
else if (oflags & _O_U8TEXT)
|
||||||
get_ioinfo_nolock(*fd)->exflag |= EF_UTF8;
|
get_ioinfo_nolock(*fd)->exflag |= EF_UTF8;
|
||||||
|
|
|
@ -1039,6 +1039,40 @@ static void test_fgetwc_unicode(void)
|
||||||
ch = fgetwc(tempfh);
|
ch = fgetwc(tempfh);
|
||||||
ok(ch == WEOF, "got %04hx, expected WEOF (unicode)\n", ch);
|
ok(ch == WEOF, "got %04hx, expected WEOF (unicode)\n", ch);
|
||||||
fclose(tempfh);
|
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);
|
unlink(temppath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue