mirror of
https://github.com/reactos/reactos.git
synced 2025-07-04 06:31:22 +00:00
[CRT]
* Update _setmode(). * Fixes some msvcrt tests. CORE-8080 svn path=/trunk/; revision=63260
This commit is contained in:
parent
3def58e0ff
commit
d8d54df1f6
1 changed files with 29 additions and 7 deletions
|
@ -92,6 +92,10 @@ int *__p___mb_cur_max(void);
|
||||||
#define WX_NOSEEK 0x40
|
#define WX_NOSEEK 0x40
|
||||||
#define WX_TEXT 0x80
|
#define WX_TEXT 0x80
|
||||||
|
|
||||||
|
/* values for exflag - it's used differently in msvcr90.dll*/
|
||||||
|
#define EF_UTF8 0x01
|
||||||
|
#define EF_UTF16 0x02
|
||||||
|
|
||||||
/* FIXME: this should be allocated dynamically */
|
/* FIXME: this should be allocated dynamically */
|
||||||
#define MAX_FILES 2048
|
#define MAX_FILES 2048
|
||||||
#define FD_BLOCK_SIZE 64
|
#define FD_BLOCK_SIZE 64
|
||||||
|
@ -2010,15 +2014,33 @@ int CDECL _read(int fd, void *buf, unsigned int count)
|
||||||
int CDECL _setmode(int fd,int mode)
|
int CDECL _setmode(int fd,int mode)
|
||||||
{
|
{
|
||||||
int ret = get_ioinfo(fd)->wxflag & WX_TEXT ? _O_TEXT : _O_BINARY;
|
int ret = get_ioinfo(fd)->wxflag & WX_TEXT ? _O_TEXT : _O_BINARY;
|
||||||
if (mode & (~(_O_TEXT|_O_BINARY)))
|
if(ret==_O_TEXT && (get_ioinfo(fd)->exflag & (EF_UTF8|EF_UTF16)))
|
||||||
FIXME("fd (%d) mode (0x%08x) unknown\n",fd,mode);
|
ret = _O_WTEXT;
|
||||||
if ((mode & _O_TEXT) == _O_TEXT)
|
|
||||||
get_ioinfo(fd)->wxflag |= WX_TEXT;
|
if(mode!=_O_TEXT && mode!=_O_BINARY && mode!=_O_WTEXT
|
||||||
else
|
&& mode!=_O_U16TEXT && mode!=_O_U8TEXT) {
|
||||||
|
*_errno() = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mode == _O_BINARY) {
|
||||||
get_ioinfo(fd)->wxflag &= ~WX_TEXT;
|
get_ioinfo(fd)->wxflag &= ~WX_TEXT;
|
||||||
|
get_ioinfo(fd)->exflag &= ~(EF_UTF8|EF_UTF16);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get_ioinfo(fd)->wxflag |= WX_TEXT;
|
||||||
|
if(mode == _O_TEXT)
|
||||||
|
get_ioinfo(fd)->exflag &= ~(EF_UTF8|EF_UTF16);
|
||||||
|
else if(mode == _O_U8TEXT)
|
||||||
|
get_ioinfo(fd)->exflag = (get_ioinfo(fd)->exflag & ~EF_UTF16) | EF_UTF8;
|
||||||
|
else
|
||||||
|
get_ioinfo(fd)->exflag = (get_ioinfo(fd)->exflag & ~EF_UTF8) | EF_UTF16;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* _tell (MSVCRT.@)
|
* _tell (MSVCRT.@)
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue