[Python-checkins] CVS: python/dist/src/PC WinMain.c,1.3,1.4

Fredrik Lundh python-dev@python.org
Sat, 8 Jul 2000 11:06:44 -0700


Update of /cvsroot/python/python/dist/src/PC
In directory slayer.i.sourceforge.net:/tmp/cvs-serv20032/PC

Modified Files:
	WinMain.c 
Log Message:


- this is a tentative checkin of the #100764 patch (by
  Barry Scott).  it appears to solve the problem on NT
  and 2000, but not on Windows 95.

  in other words, it's better than before, but not per-
  fect.  I'll leave the patch open for now.

Index: WinMain.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/PC/WinMain.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** WinMain.c	1998/08/08 20:00:49	1.3
--- WinMain.c	2000/07/08 18:06:41	1.4
***************
*** 1,5 ****
--- 1,9 ----
  /* Minimal main program -- everything is loaded from the library. */
  
+ #define WINDOWS_LEAN_AND_MEAN
  #include <windows.h>
+ #include <fcntl.h>
+ #include <sys/stat.h>
+ 
  #include "Python.h"
  
***************
*** 7,16 ****
  
  int WINAPI WinMain(
!     HINSTANCE hInstance,      // handle to current instance
!     HINSTANCE hPrevInstance,  // handle to previous instance
!     LPSTR lpCmdLine,          // pointer to command line
!     int nCmdShow              // show state of window
  )
  {
! 	return Py_Main(__argc, __argv);
  }
--- 11,48 ----
  
  int WINAPI WinMain(
!     HINSTANCE hInstance,      /* handle to current instance */
!     HINSTANCE hPrevInstance,  /* handle to previous instance */
!     LPSTR lpCmdLine,          /* pointer to command line */
!     int nCmdShow              /* show state of window */
  )
  {
!     int null_file;
! 
!     /*
!      * make sure that the C RTL has valid file descriptors for
!      * stdin, stdout, stderr.  Use the NUL device if necessary.
!      * This allows popen to work under pythonw.
!      *
!      * When pythonw.exe starts the C RTL function _ioinit is called
!      * first. WinMain is called later hence the need to check for
!      * invalid handles.
!      *
!      * Note: FILE stdin, stdout, stderr do not use the file descriptors
!      * setup here. They are already initialised before WinMain was called.
!      */
! 
!     null_file = open("NUL", _O_RDWR);
! 
!     if (_get_osfhandle(0) == -1)
!         dup2(null_file, 0);
! 
!     if (_get_osfhandle(1) == -1)
!         dup2(null_file, 1);
! 
!     if (_get_osfhandle(2) == -1)
!         dup2(null_file, 2);
! 
!     close(null_file);
! 
!     return Py_Main(__argc, __argv);
  }