Piotr Caban : msvcrt: Reuse standard file descriptors after closing them.

Alexandre Julliard julliard at winehq.org
Mon Mar 4 13:23:37 CST 2013


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Fri Mar  1 15:04:21 2013 +0100

msvcrt: Reuse standard file descriptors after closing them.

---

 dlls/msvcrt/file.c |   23 ++++++++++-------------
 1 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index c730bd7..5b3bf5e 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -251,40 +251,37 @@ static HANDLE msvcrt_fdtoh(int fd)
 /* INTERNAL: free a file entry fd */
 static void msvcrt_free_fd(int fd)
 {
-  HANDLE old_handle;
   ioinfo *fdinfo;
 
   LOCK_FILES();
   fdinfo = msvcrt_get_ioinfo(fd);
-  old_handle = fdinfo->handle;
   if(fdinfo != &MSVCRT___badioinfo)
   {
     fdinfo->handle = INVALID_HANDLE_VALUE;
     fdinfo->wxflag = 0;
   }
   TRACE(":fd (%d) freed\n",fd);
-  if (fd < 3) /* don't use 0,1,2 for user files */
+
+  if (fd < 3)
   {
     switch (fd)
     {
     case 0:
-        if (GetStdHandle(STD_INPUT_HANDLE) == old_handle) SetStdHandle(STD_INPUT_HANDLE, 0);
+        SetStdHandle(STD_INPUT_HANDLE, 0);
         break;
     case 1:
-        if (GetStdHandle(STD_OUTPUT_HANDLE) == old_handle) SetStdHandle(STD_OUTPUT_HANDLE, 0);
+        SetStdHandle(STD_OUTPUT_HANDLE, 0);
         break;
     case 2:
-        if (GetStdHandle(STD_ERROR_HANDLE) == old_handle) SetStdHandle(STD_ERROR_HANDLE, 0);
+        SetStdHandle(STD_ERROR_HANDLE, 0);
         break;
     }
   }
-  else
-  {
-    if (fd == MSVCRT_fdend - 1)
-      MSVCRT_fdend--;
-    if (fd < MSVCRT_fdstart)
-      MSVCRT_fdstart = fd;
-  }
+
+  if (fd == MSVCRT_fdend - 1)
+    MSVCRT_fdend--;
+  if (fd < MSVCRT_fdstart)
+    MSVCRT_fdstart = fd;
   UNLOCK_FILES();
 }
 




More information about the wine-cvs mailing list