fix for closing stdio/out/err dos handles

Rafael Kitover caelum at debian.org
Wed Jul 31 06:03:15 CDT 2002


reference: http://www.winehq.com/hypermail/wine-devel/2002/07/0491.html

License: X11,LGPL
-------------- next part --------------
Name: dos_stdio_close_fix
ChangeLog: Changed dos_handles to store dups of stdio/out/err as per Ove Kaaven's suggestion.
GenDate: 2002/07/31 10:59:00 UTC
ModifiedFiles: files/file.c
AddedFiles: 
===================================================================
RCS file: /home/wine/wine/files/file.c,v
retrieving revision 1.149
diff -u -r1.149 file.c
--- files/file.c	5 Jun 2002 00:47:38 -0000	1.149
+++ files/file.c	31 Jul 2002 10:59:05 -0000
@@ -1230,11 +1230,12 @@
  */
 static void FILE_InitProcessDosHandles( void )
 {
-    dos_handles[0] = GetStdHandle(STD_INPUT_HANDLE);
-    dos_handles[1] = GetStdHandle(STD_OUTPUT_HANDLE);
-    dos_handles[2] = GetStdHandle(STD_ERROR_HANDLE);
-    dos_handles[3] = GetStdHandle(STD_ERROR_HANDLE);
-    dos_handles[4] = GetStdHandle(STD_ERROR_HANDLE);
+    HANDLE cp = GetCurrentProcess();
+    DuplicateHandle(cp, GetStdHandle(STD_INPUT_HANDLE), cp, &dos_handles[0], 0, TRUE, DUPLICATE_SAME_ACCESS);
+    DuplicateHandle(cp, GetStdHandle(STD_INPUT_HANDLE), cp, &dos_handles[1], 0, TRUE, DUPLICATE_SAME_ACCESS);
+    DuplicateHandle(cp, GetStdHandle(STD_ERROR_HANDLE), cp, &dos_handles[2], 0, TRUE, DUPLICATE_SAME_ACCESS);
+    DuplicateHandle(cp, GetStdHandle(STD_ERROR_HANDLE), cp, &dos_handles[3], 0, TRUE, DUPLICATE_SAME_ACCESS);
+    DuplicateHandle(cp, GetStdHandle(STD_ERROR_HANDLE), cp, &dos_handles[4], 0, TRUE, DUPLICATE_SAME_ACCESS);
 }
 
 /***********************************************************************
@@ -1329,12 +1330,6 @@
         SetLastError( ERROR_INVALID_HANDLE );
         return HFILE_ERROR16;
     }
-    if (hFile2 < 5)
-    {
-        FIXME("stdio handle closed, need proper conversion\n" );
-        SetLastError( ERROR_INVALID_HANDLE );
-        return HFILE_ERROR16;
-    }
     if (!DuplicateHandle( GetCurrentProcess(), dos_handles[hFile1],
                           GetCurrentProcess(), &new_handle,
                           0, FALSE, DUPLICATE_SAME_ACCESS ))
@@ -1350,12 +1345,6 @@
  */
 HFILE16 WINAPI _lclose16( HFILE16 hFile )
 {
-    if (hFile < 5)
-    {
-        FIXME("stdio handle closed, need proper conversion\n" );
-        SetLastError( ERROR_INVALID_HANDLE );
-        return HFILE_ERROR16;
-    }
     if ((hFile >= DOS_TABLE_SIZE) || !dos_handles[hFile])
     {
         SetLastError( ERROR_INVALID_HANDLE );


More information about the wine-patches mailing list