MSVCRT_fgetws defaults to multibyte strings
Uwe Bonnes
bon at elektron.ikp.physik.tu-darmstadt.de
Sun Jul 7 13:39:44 CDT 2002
Changelog:
dlls/msvcrt/file.c: MSVCRT_lseekfgetws
fgetws defaults to multibyte strings
--
Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Free Software: If you contribute nothing, expect nothing
--
Index: wine/dlls/msvcrt/file.c
===================================================================
RCS file: /home/wine/wine/dlls/msvcrt/file.c,v
retrieving revision 1.28
diff -u -r1.28 file.c
@@ -1562,17 +1564,37 @@
return _fgetwchar();
}
+/********************************************************************
+ * fgetmbc (internal)
+ *
+ * Read a multibyte character from a file
+ *
+ */
+
+static BOOL MSVCRT_fgetmbc (char *mbc, MSVCRT_FILE* file)
+{
+ CHAR * s=mbc;
+ for (*s = MSVCRT_fgetc(file); (*s != MSVCRT_EOF) && !MSVCRT_isleadbyte(*s);
+ s++);
+ return (*(s-1) != MSVCRT_EOF);
+}
/*********************************************************************
* fgetws (MSVCRT.@)
*/
WCHAR *MSVCRT_fgetws(WCHAR *s, int size, MSVCRT_FILE* file)
{
int cc;
+ char mbchar[8];
+ BOOL instrg;
WCHAR * buf_start = s;
TRACE(":file(%p) fd (%d) str (%p) len (%d)\n",
- file,file->_file,s,size);
-
+ file,file->_file,s, size);
+#if 0
+ /* Only files opened in binary mode have wide character.
+ All others are multibyte characters
+ Multibyte characters should be the normal case for now
+ */
for(cc = MSVCRT_fgetwc(file); cc != MSVCRT_WEOF && cc != L'\n';
cc = MSVCRT_fgetwc(file))
if (cc != L'\r')
@@ -1589,7 +1611,26 @@
if (--size > 0)
*s++ = '\n';
*s = '\0';
-/* TRACE(":got '%s'\n", buf_start); */
+#endif
+ for(instrg=MSVCRT_fgetmbc(mbchar, file); instrg && *mbchar != '\n';
+ instrg=MSVCRT_fgetmbc(mbchar, file))
+ if (*mbchar != '\r')
+ {
+ if (--size <= 0) break;
+ MSVCRT_mbtowc(s,mbchar, 8);
+ s++;
+ }
+ if ((!instrg) && (s == buf_start)) /* If nothing read, return 0*/
+ {
+ TRACE(":nothing read\n");
+ return 0;
+ }
+ if (*mbchar == '\n')
+ if (--size > 0)
+ *s++ = '\n';
+ *s = '\0';
+
+ TRACE(":got '%s'\n", debugstr_w(buf_start));
return buf_start;
}
@@ -2252,6 +2300,8 @@
MSVCRT_wint_t cc;
WCHAR* ws = buf;
+ /* FIXME bon 020707: Probably we should read the input as
+ Multibyte charaters */
for (cc = MSVCRT_fgetwc(MSVCRT_stdin); cc != MSVCRT_WEOF && cc != '\n';
cc = MSVCRT_fgetwc(MSVCRT_stdin))
{
More information about the wine-patches
mailing list