Piotr Caban : msvcrt: Don' t duplicate standard handles during initialization.

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


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

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

msvcrt: Don't duplicate standard handles during initialization.

---

 dlls/msvcrt/file.c |   50 +++++++++-----------------------------------------
 1 files changed, 9 insertions(+), 41 deletions(-)

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 612f470..c730bd7 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -486,53 +486,21 @@ void msvcrt_init_io(void)
         if (msvcrt_get_ioinfo(MSVCRT_fdstart)->handle == INVALID_HANDLE_VALUE) break;
   }
 
-  if(!MSVCRT___pioinfo[0])
-      msvcrt_alloc_fd_from(INVALID_HANDLE_VALUE, 0, 3);
-
-  fdinfo = msvcrt_get_ioinfo(0);
+  fdinfo = msvcrt_get_ioinfo(MSVCRT_STDIN_FILENO);
   if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE)
-  {
-      HANDLE std = GetStdHandle(STD_INPUT_HANDLE);
-      if (std != INVALID_HANDLE_VALUE && DuplicateHandle(GetCurrentProcess(), std,
-                                                         GetCurrentProcess(), &fdinfo->handle,
-                                                         0, TRUE, DUPLICATE_SAME_ACCESS))
-          fdinfo->wxflag = WX_OPEN | WX_TEXT;
-      fdinfo->lookahead[0] = '\n';
-      fdinfo->lookahead[1] = '\n';
-      fdinfo->lookahead[2] = '\n';
-      fdinfo->exflag = 0;
-  }
+    msvcrt_alloc_fd_from(GetStdHandle(STD_INPUT_HANDLE), WX_OPEN|WX_TEXT, MSVCRT_STDIN_FILENO);
 
-  fdinfo = msvcrt_get_ioinfo(1);
+  fdinfo = msvcrt_get_ioinfo(MSVCRT_STDOUT_FILENO);
   if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE)
-  {
-      HANDLE std = GetStdHandle(STD_OUTPUT_HANDLE);
-      if (std != INVALID_HANDLE_VALUE && DuplicateHandle(GetCurrentProcess(), std,
-                                                         GetCurrentProcess(), &fdinfo->handle,
-                                                         0, TRUE, DUPLICATE_SAME_ACCESS))
-          fdinfo->wxflag = WX_OPEN | WX_TEXT;
-      fdinfo->lookahead[0] = '\n';
-      fdinfo->lookahead[1] = '\n';
-      fdinfo->lookahead[2] = '\n';
-      fdinfo->exflag = 0;
-  }
+    msvcrt_alloc_fd_from(GetStdHandle(STD_OUTPUT_HANDLE), WX_OPEN|WX_TEXT, MSVCRT_STDOUT_FILENO);
 
-  fdinfo = msvcrt_get_ioinfo(2);
+  fdinfo = msvcrt_get_ioinfo(MSVCRT_STDERR_FILENO);
   if (!(fdinfo->wxflag & WX_OPEN) || fdinfo->handle == INVALID_HANDLE_VALUE)
-  {
-      HANDLE std = GetStdHandle(STD_ERROR_HANDLE);
-      if (std != INVALID_HANDLE_VALUE && DuplicateHandle(GetCurrentProcess(), std,
-                                                         GetCurrentProcess(), &fdinfo->handle,
-                                                         0, TRUE, DUPLICATE_SAME_ACCESS))
-          fdinfo->wxflag = WX_OPEN | WX_TEXT;
-      fdinfo->lookahead[0] = '\n';
-      fdinfo->lookahead[1] = '\n';
-      fdinfo->lookahead[2] = '\n';
-      fdinfo->exflag = 0;
-  }
+    msvcrt_alloc_fd_from(GetStdHandle(STD_ERROR_HANDLE), WX_OPEN|WX_TEXT, MSVCRT_STDERR_FILENO);
 
-  TRACE(":handles (%p)(%p)(%p)\n", msvcrt_get_ioinfo(0)->handle,
-	msvcrt_get_ioinfo(1)->handle, msvcrt_get_ioinfo(2)->handle);
+  TRACE(":handles (%p)(%p)(%p)\n", msvcrt_get_ioinfo(MSVCRT_STDIN_FILENO)->handle,
+        msvcrt_get_ioinfo(MSVCRT_STDOUT_FILENO)->handle,
+        msvcrt_get_ioinfo(MSVCRT_STDERR_FILENO)->handle);
 
   memset(MSVCRT__iob,0,3*sizeof(MSVCRT_FILE));
   for (i = 0; i < 3; i++)




More information about the wine-cvs mailing list