From ae15a4b6bcc6163255ffb01e820ba5b4532febf9 Mon Sep 17 00:00:00 2001 From: Piotr Caban <piotr@codeweavers.com> Date: Fri, 20 May 2011 13:22:29 +0200 Subject: [PATCH] msvcrt: Make FILE->_flag reading functions thread safe. --- dlls/msvcrt/file.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index 444a8d89604..16aa10cb0b7 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -1198,7 +1198,10 @@ int CDECL MSVCRT__chsize(int fd, MSVCRT_long size) void CDECL MSVCRT_clearerr(MSVCRT_FILE* file) { TRACE(":file (%p) fd (%d)\n",file,file->_file); + + MSVCRT__lock_file(file); file->_flag &= ~(MSVCRT__IOERR | MSVCRT__IOEOF); + MSVCRT__unlock_file(file); } /********************************************************************* @@ -1338,8 +1341,15 @@ __int64 CDECL MSVCRT__filelengthi64(int fd) */ int CDECL MSVCRT__fileno(MSVCRT_FILE* file) { + int ret; + TRACE(":FILE* (%p) fd (%d)\n",file,file->_file); - return file->_file; + + MSVCRT__lock_file(file); + ret = file->_file; + MSVCRT__unlock_file(file); + + return ret; } /********************************************************************* @@ -2589,7 +2599,13 @@ int CDECL MSVCRT_fclose(MSVCRT_FILE* file) */ int CDECL MSVCRT_feof(MSVCRT_FILE* file) { - return file->_flag & MSVCRT__IOEOF; + int ret; + + MSVCRT__lock_file(file); + ret = file->_flag & MSVCRT__IOEOF; + MSVCRT__unlock_file(file); + + return ret; } /********************************************************************* @@ -2597,7 +2613,13 @@ int CDECL MSVCRT_feof(MSVCRT_FILE* file) */ int CDECL MSVCRT_ferror(MSVCRT_FILE* file) { - return file->_flag & MSVCRT__IOERR; + int ret; + + MSVCRT__lock_file(file); + ret = file->_flag & MSVCRT__IOERR; + MSVCRT__unlock_file(file); + + return ret; } /********************************************************************* -- GitLab