Piotr Caban : msvcrt: Added unicode modes support _setmode function.
Alexandre Julliard
julliard at winehq.org
Thu Jan 10 13:36:11 CST 2013
Module: wine
Branch: master
Commit: a0ef884542eee3e1dbbe11de31a21556af39a21b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a0ef884542eee3e1dbbe11de31a21556af39a21b
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu Jan 10 11:44:48 2013 +0100
msvcrt: Added unicode modes support _setmode function.
---
dlls/msvcrt/file.c | 31 ++++++++++++++++++++++++-------
1 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 0b028bd..0818f8e 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -2232,14 +2232,31 @@ int CDECL MSVCRT__read(int fd, void *buf, unsigned int count)
*/
int CDECL MSVCRT__setmode(int fd,int mode)
{
- int ret = msvcrt_get_ioinfo(fd)->wxflag & WX_TEXT ? MSVCRT__O_TEXT : MSVCRT__O_BINARY;
- if (mode & (~(MSVCRT__O_TEXT|MSVCRT__O_BINARY)))
- FIXME("fd (%d) mode (0x%08x) unknown\n",fd,mode);
- if ((mode & MSVCRT__O_TEXT) == MSVCRT__O_TEXT)
+ int ret = msvcrt_get_ioinfo(fd)->wxflag & WX_TEXT ? MSVCRT__O_TEXT : MSVCRT__O_BINARY;
+ if(ret==MSVCRT__O_TEXT && (msvcrt_get_ioinfo(fd)->exflag & (EF_UTF8|EF_UTF16)))
+ ret = MSVCRT__O_WTEXT;
+
+ if(mode!=MSVCRT__O_TEXT && mode!=MSVCRT__O_BINARY && mode!=MSVCRT__O_WTEXT
+ && mode!=MSVCRT__O_U16TEXT && mode!=MSVCRT__O_U8TEXT) {
+ *MSVCRT__errno() = MSVCRT_EINVAL;
+ return -1;
+ }
+
+ if(mode == MSVCRT__O_BINARY) {
+ msvcrt_get_ioinfo(fd)->wxflag &= ~WX_TEXT;
+ msvcrt_get_ioinfo(fd)->exflag &= ~(EF_UTF8|EF_UTF16);
+ return ret;
+ }
+
msvcrt_get_ioinfo(fd)->wxflag |= WX_TEXT;
- else
- msvcrt_get_ioinfo(fd)->wxflag &= ~WX_TEXT;
- return ret;
+ if(mode == MSVCRT__O_TEXT)
+ msvcrt_get_ioinfo(fd)->exflag &= ~(EF_UTF8|EF_UTF16);
+ else if(mode == MSVCRT__O_U8TEXT)
+ msvcrt_get_ioinfo(fd)->exflag = (msvcrt_get_ioinfo(fd)->exflag & ~EF_UTF16) | EF_UTF8;
+ else
+ msvcrt_get_ioinfo(fd)->exflag = (msvcrt_get_ioinfo(fd)->exflag & ~EF_UTF8) | EF_UTF16;
+
+ return ret;
}
/*********************************************************************
More information about the wine-cvs
mailing list