[Python-checkins] python/dist/src/Modules posixmodule.c,2.276,2.277

loewis@users.sourceforge.net loewis@users.sourceforge.net
Tue, 31 Dec 2002 04:55:18 -0800


Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv27086/Modules

Modified Files:
	posixmodule.c 
Log Message:
Patch #656590: /dev/ptmx support for ptys.


Index: posixmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/posixmodule.c,v
retrieving revision 2.276
retrieving revision 2.277
diff -C2 -d -r2.276 -r2.277
*** posixmodule.c	27 Dec 2002 10:16:42 -0000	2.276
--- posixmodule.c	31 Dec 2002 12:55:15 -0000	2.277
***************
*** 2719,2723 ****
  #endif
  
! #if defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY)
  #ifdef HAVE_PTY_H
  #include <pty.h>
--- 2719,2723 ----
  #endif
  
! #if defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) || defined(HAVE_DEV_PTMX)
  #ifdef HAVE_PTY_H
  #include <pty.h>
***************
*** 2727,2733 ****
  #endif /* HAVE_LIBUTIL_H */
  #endif /* HAVE_PTY_H */
! #endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) */
  
! #if defined(HAVE_OPENPTY) || defined(HAVE__GETPTY)
  PyDoc_STRVAR(posix_openpty__doc__,
  "openpty() -> (master_fd, slave_fd)\n\n\
--- 2727,2736 ----
  #endif /* HAVE_LIBUTIL_H */
  #endif /* HAVE_PTY_H */
! #ifdef sun
! #include <sys/stropts.h>
! #endif
! #endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) || defined(HAVE_DEV_PTMX */
  
! #if defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(HAVE_DEV_PTMX)
  PyDoc_STRVAR(posix_openpty__doc__,
  "openpty() -> (master_fd, slave_fd)\n\n\
***************
*** 2741,2744 ****
--- 2744,2753 ----
  	char * slave_name;
  #endif
+ #if defined(HAVE_DEV_PTMX) && !defined(HAVE_OPENPTY) && !defined(HAVE__GETPTY)
+ 	void *sig_saved;
+ #ifdef sun
+ 	extern char *ptsname();
+ #endif
+ #endif
  
  	if (!PyArg_ParseTuple(args, ":openpty"))
***************
*** 2748,2752 ****
  	if (openpty(&master_fd, &slave_fd, NULL, NULL, NULL) != 0)
  		return posix_error();
! #else
  	slave_name = _getpty(&master_fd, O_RDWR, 0666, 0);
  	if (slave_name == NULL)
--- 2757,2761 ----
  	if (openpty(&master_fd, &slave_fd, NULL, NULL, NULL) != 0)
  		return posix_error();
! #elif HAVE__GETPTY
  	slave_name = _getpty(&master_fd, O_RDWR, 0666, 0);
  	if (slave_name == NULL)
***************
*** 2756,2759 ****
--- 2765,2791 ----
  	if (slave_fd < 0)
  		return posix_error();
+ #else
+ 	master_fd = open("/dev/ptmx", O_RDWR | O_NOCTTY); /* open master */
+ 	if (master_fd < 0)
+ 		return posix_error();
+ 	sig_saved = signal(SIGCHLD, SIG_DFL);
+ 	if (grantpt(master_fd) < 0) /* change permission of slave */
+ 		return posix_error();
+ 	if (unlockpt(master_fd) < 0) /* unlock slave */
+ 		return posix_error();
+ 	signal(SIGCHLD, sig_saved);
+ 	slave_name = ptsname(master_fd); /* get name of slave */
+ 	if (slave_name == NULL)
+ 		return posix_error();
+ 	slave_fd = open(slave_name, O_RDWR | O_NOCTTY); /* open slave */
+ 	if (slave_fd < 0)
+ 		return posix_error();
+ #ifndef __CYGWIN__ 
+ 	ioctl(slave_fd, I_PUSH, "ptem"); /* push ptem */
+ 	ioctl(slave_fd, I_PUSH, "ldterm"); /* push ldterm */
+ #ifndef _hpux
+ 	ioctl(slave_fd, I_PUSH, "ttcompat"); /* push ttcompat */
+ #endif /* _hpux */
+ #endif /* HAVE_CYGWIN */
  #endif /* HAVE_OPENPTY */
  
***************
*** 2761,2765 ****
  
  }
! #endif /* defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) */
  
  #ifdef HAVE_FORKPTY
--- 2793,2797 ----
  
  }
! #endif /* defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(HAVE_DEV_PTMX) */
  
  #ifdef HAVE_FORKPTY
***************
*** 7230,7236 ****
  	{"fork",	posix_fork, METH_VARARGS, posix_fork__doc__},
  #endif /* HAVE_FORK */
! #if defined(HAVE_OPENPTY) || defined(HAVE__GETPTY)
  	{"openpty",	posix_openpty, METH_VARARGS, posix_openpty__doc__},
! #endif /* HAVE_OPENPTY || HAVE__GETPTY */
  #ifdef HAVE_FORKPTY
  	{"forkpty",	posix_forkpty, METH_VARARGS, posix_forkpty__doc__},
--- 7262,7268 ----
  	{"fork",	posix_fork, METH_VARARGS, posix_fork__doc__},
  #endif /* HAVE_FORK */
! #if defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(HAVE_DEV_PTMX)
  	{"openpty",	posix_openpty, METH_VARARGS, posix_openpty__doc__},
! #endif /* HAVE_OPENPTY || HAVE__GETPTY || HAVE_DEV_PTMX */
  #ifdef HAVE_FORKPTY
  	{"forkpty",	posix_forkpty, METH_VARARGS, posix_forkpty__doc__},