Piotr Caban : msvcrt: Use fd critical section in _setmode.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Jun 4 09:32:02 CDT 2015
Module: wine
Branch: master
Commit: f00b7f4058489f8c517a083cedf879957e0b0bce
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f00b7f4058489f8c517a083cedf879957e0b0bce
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu Jun 4 11:24:44 2015 +0200
msvcrt: Use fd critical section in _setmode.
---
dlls/msvcrt/file.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 5644a61..c9f9cae 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -2797,30 +2797,34 @@ int CDECL MSVCRT__read(int fd, void *buf, unsigned int count)
*/
int CDECL MSVCRT__setmode(int fd,int mode)
{
- int ret = get_ioinfo_nolock(fd)->wxflag & WX_TEXT ? MSVCRT__O_TEXT : MSVCRT__O_BINARY;
- if(ret==MSVCRT__O_TEXT && (get_ioinfo_nolock(fd)->exflag & (EF_UTF8|EF_UTF16)))
+ ioinfo *info = get_ioinfo(fd);
+ int ret = info->wxflag & WX_TEXT ? MSVCRT__O_TEXT : MSVCRT__O_BINARY;
+ if(ret==MSVCRT__O_TEXT && (info->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;
+ release_ioinfo(info);
return -1;
}
if(mode == MSVCRT__O_BINARY) {
- get_ioinfo_nolock(fd)->wxflag &= ~WX_TEXT;
- get_ioinfo_nolock(fd)->exflag &= ~(EF_UTF8|EF_UTF16);
+ info->wxflag &= ~WX_TEXT;
+ info->exflag &= ~(EF_UTF8|EF_UTF16);
+ release_ioinfo(info);
return ret;
}
- get_ioinfo_nolock(fd)->wxflag |= WX_TEXT;
+ info->wxflag |= WX_TEXT;
if(mode == MSVCRT__O_TEXT)
- get_ioinfo_nolock(fd)->exflag &= ~(EF_UTF8|EF_UTF16);
+ info->exflag &= ~(EF_UTF8|EF_UTF16);
else if(mode == MSVCRT__O_U8TEXT)
- get_ioinfo_nolock(fd)->exflag = (get_ioinfo_nolock(fd)->exflag & ~EF_UTF16) | EF_UTF8;
+ info->exflag = (info->exflag & ~EF_UTF16) | EF_UTF8;
else
- get_ioinfo_nolock(fd)->exflag = (get_ioinfo_nolock(fd)->exflag & ~EF_UTF8) | EF_UTF16;
+ info->exflag = (info->exflag & ~EF_UTF8) | EF_UTF16;
+ release_ioinfo(info);
return ret;
}
More information about the wine-cvs
mailing list