Piotr Caban : msvcrt: Use fd critical section in _fstat64.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Dec 5 15:36:55 CST 2014


Module: wine
Branch: master
Commit: 6c2d4f1092d044a2fc949e7189a30fcd4d96099f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6c2d4f1092d044a2fc949e7189a30fcd4d96099f

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Fri Dec  5 14:43:17 2014 +0100

msvcrt: Use fd critical section in _fstat64.

---

 dlls/msvcrt/file.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 3eae1f1..ff1f5d6 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -1651,25 +1651,29 @@ int CDECL MSVCRT__fileno(MSVCRT_FILE* file)
  */
 int CDECL MSVCRT__fstat64(int fd, struct MSVCRT__stat64* buf)
 {
+  ioinfo *info = get_ioinfo(fd);
   DWORD dw;
   DWORD type;
   BY_HANDLE_FILE_INFORMATION hfi;
-  HANDLE hand = msvcrt_fdtoh(fd);
 
-  TRACE(":fd (%d) stat (%p)\n",fd,buf);
-  if (hand == INVALID_HANDLE_VALUE)
+  TRACE(":fd (%d) stat (%p)\n", fd, buf);
+  if (info->handle == INVALID_HANDLE_VALUE)
+  {
+    release_ioinfo(info);
     return -1;
+  }
 
   if (!buf)
   {
     WARN(":failed-NULL buf\n");
     msvcrt_set_errno(ERROR_INVALID_PARAMETER);
+    release_ioinfo(info);
     return -1;
   }
 
   memset(&hfi, 0, sizeof(hfi));
   memset(buf, 0, sizeof(struct MSVCRT__stat64));
-  type = GetFileType(hand);
+  type = GetFileType(info->handle);
   if (type == FILE_TYPE_PIPE)
   {
     buf->st_dev = buf->st_rdev = fd;
@@ -1684,10 +1688,11 @@ int CDECL MSVCRT__fstat64(int fd, struct MSVCRT__stat64* buf)
   }
   else /* FILE_TYPE_DISK etc. */
   {
-    if (!GetFileInformationByHandle(hand, &hfi))
+    if (!GetFileInformationByHandle(info->handle, &hfi))
     {
       WARN(":failed-last error (%d)\n",GetLastError());
       msvcrt_set_errno(ERROR_INVALID_PARAMETER);
+      release_ioinfo(info);
       return -1;
     }
     buf->st_mode = S_IFREG | 0444;
@@ -1702,6 +1707,7 @@ int CDECL MSVCRT__fstat64(int fd, struct MSVCRT__stat64* buf)
   }
   TRACE(":dwFileAttributes = 0x%x, mode set to 0x%x\n",hfi.dwFileAttributes,
    buf->st_mode);
+  release_ioinfo(info);
   return 0;
 }
 




More information about the wine-cvs mailing list