| Index: third_party/pexpect/notes/posixmodule.c.diff
|
| diff --git a/third_party/pexpect/notes/posixmodule.c.diff b/third_party/pexpect/notes/posixmodule.c.diff
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3bea1f9cba96e0701ec64fb3a273e377b6d66d93
|
| --- /dev/null
|
| +++ b/third_party/pexpect/notes/posixmodule.c.diff
|
| @@ -0,0 +1,233 @@
|
| +*** Python-2.2.1.orig/Modules/posixmodule.c Tue Mar 12 16:38:31 2002
|
| +--- Python-2.2.1/Modules/posixmodule.c Tue May 21 01:16:29 2002
|
| +***************
|
| +*** 1904,1910 ****
|
| + }
|
| + #endif
|
| +
|
| +! #if defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY)
|
| + #ifdef HAVE_PTY_H
|
| + #include <pty.h>
|
| + #else
|
| +--- 1904,1913 ----
|
| + }
|
| + #endif
|
| +
|
| +! #if defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) || defined(sun)
|
| +! #ifdef sun
|
| +! #include <sys/stropts.h>
|
| +! #endif
|
| + #ifdef HAVE_PTY_H
|
| + #include <pty.h>
|
| + #else
|
| +***************
|
| +*** 1914,1920 ****
|
| + #endif /* HAVE_PTY_H */
|
| + #endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) */
|
| +
|
| +! #if defined(HAVE_OPENPTY) || defined(HAVE__GETPTY)
|
| + static char posix_openpty__doc__[] =
|
| + "openpty() -> (master_fd, slave_fd)\n\
|
| + Open a pseudo-terminal, returning open fd's for both master and slave end.\n";
|
| +--- 1917,1923 ----
|
| + #endif /* HAVE_PTY_H */
|
| + #endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) */
|
| +
|
| +! #if defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(sun)
|
| + static char posix_openpty__doc__[] =
|
| + "openpty() -> (master_fd, slave_fd)\n\
|
| + Open a pseudo-terminal, returning open fd's for both master and slave end.\n";
|
| +***************
|
| +*** 1925,1932 ****
|
| + int master_fd, slave_fd;
|
| + #ifndef HAVE_OPENPTY
|
| + char * slave_name;
|
| + #endif
|
| +!
|
| + if (!PyArg_ParseTuple(args, ":openpty"))
|
| + return NULL;
|
| +
|
| +--- 1928,1941 ----
|
| + int master_fd, slave_fd;
|
| + #ifndef HAVE_OPENPTY
|
| + char * slave_name;
|
| ++ #ifdef sun
|
| ++ void *sig_saved;
|
| + #endif
|
| +! #endif
|
| +! #if !defined(HAVE_OPENPTY) && !defined(HAVE__GETPTY) && defined(sun)
|
| +! extern char *ptsname();
|
| +! #endif
|
| +!
|
| + if (!PyArg_ParseTuple(args, ":openpty"))
|
| + return NULL;
|
| +
|
| +***************
|
| +*** 1933,1939 ****
|
| + #ifdef HAVE_OPENPTY
|
| + 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)
|
| + return posix_error();
|
| +--- 1942,1948 ----
|
| + #ifdef HAVE_OPENPTY
|
| + 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)
|
| + return posix_error();
|
| +***************
|
| +*** 1941,1946 ****
|
| +--- 1950,1966 ----
|
| + slave_fd = open(slave_name, O_RDWR);
|
| + if (slave_fd < 0)
|
| + return posix_error();
|
| ++ #else
|
| ++ master_fd = open("/dev/ptmx", O_RDWR|O_NOCTTY); /* open master */
|
| ++ sig_saved = signal(SIGCHLD, SIG_DFL);
|
| ++ grantpt(master_fd); /* change permission of slave */
|
| ++ unlockpt(master_fd); /* unlock slave */
|
| ++ signal(SIGCHLD,sig_saved);
|
| ++ slave_name = ptsname(master_fd); /* get name of slave */
|
| ++ slave_fd = open(slave_name, O_RDWR); /* open slave */
|
| ++ ioctl(slave_fd, I_PUSH, "ptem"); /* push ptem */
|
| ++ ioctl(slave_fd, I_PUSH, "ldterm"); /* push ldterm*/
|
| ++ ioctl(slave_fd, I_PUSH, "ttcompat"); /* push ttcompat*/
|
| + #endif /* HAVE_OPENPTY */
|
| +
|
| + return Py_BuildValue("(ii)", master_fd, slave_fd);
|
| +***************
|
| +*** 1948,1954 ****
|
| + }
|
| + #endif /* defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) */
|
| +
|
| +! #ifdef HAVE_FORKPTY
|
| + static char posix_forkpty__doc__[] =
|
| + "forkpty() -> (pid, master_fd)\n\
|
| + Fork a new process with a new pseudo-terminal as controlling tty.\n\n\
|
| +--- 1968,1974 ----
|
| + }
|
| + #endif /* defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) */
|
| +
|
| +! #if defined(HAVE_FORKPTY) || defined(sun)
|
| + static char posix_forkpty__doc__[] =
|
| + "forkpty() -> (pid, master_fd)\n\
|
| + Fork a new process with a new pseudo-terminal as controlling tty.\n\n\
|
| +***************
|
| +*** 1959,1968 ****
|
| +--- 1979,2067 ----
|
| + posix_forkpty(PyObject *self, PyObject *args)
|
| + {
|
| + int master_fd, pid;
|
| ++ #if defined(sun)
|
| ++ int slave;
|
| ++ char * slave_name;
|
| ++ void *sig_saved;
|
| ++ int fd;
|
| ++ #endif
|
| +
|
| + if (!PyArg_ParseTuple(args, ":forkpty"))
|
| + return NULL;
|
| ++ #if defined(sun)
|
| ++ master_fd = open("/dev/ptmx", O_RDWR|O_NOCTTY); /* open master */
|
| ++ sig_saved = signal(SIGCHLD, SIG_DFL);
|
| ++ grantpt(master_fd); /* change permission of slave */
|
| ++ unlockpt(master_fd); /* unlock slave */
|
| ++ signal(SIGCHLD,sig_saved);
|
| ++ slave_name = ptsname(master_fd); /* get name of slave */
|
| ++ slave = open(slave_name, O_RDWR); /* open slave */
|
| ++ ioctl(slave, I_PUSH, "ptem"); /* push ptem */
|
| ++ ioctl(slave, I_PUSH, "ldterm"); /* push ldterm*/
|
| ++ ioctl(slave, I_PUSH, "ttcompat"); /* push ttcompat*/
|
| ++ if (master_fd < 0 || slave < 0)
|
| ++ {
|
| ++ return posix_error();
|
| ++ }
|
| ++ switch (pid = fork()) {
|
| ++ case -1:
|
| ++ return posix_error();
|
| ++ case 0:
|
| ++ /* First disconnect from the old controlling tty. */
|
| ++ #ifdef TIOCNOTTY
|
| ++ fd = open("/dev/tty", O_RDWR | O_NOCTTY);
|
| ++ if (fd >= 0) {
|
| ++ (void) ioctl(fd, TIOCNOTTY, NULL);
|
| ++ close(fd);
|
| ++ }
|
| ++ #endif /* TIOCNOTTY */
|
| ++ if (setsid() < 0)
|
| ++ return posix_error();
|
| ++
|
| ++ /*
|
| ++ * Verify that we are successfully disconnected from the controlling
|
| ++ * tty.
|
| ++ */
|
| ++ fd = open("/dev/tty", O_RDWR | O_NOCTTY);
|
| ++ if (fd >= 0) {
|
| ++ return posix_error();
|
| ++ close(fd);
|
| ++ }
|
| ++ /* Make it our controlling tty. */
|
| ++ #ifdef TIOCSCTTY
|
| ++ if (ioctl(slave, TIOCSCTTY, NULL) < 0)
|
| ++ return posix_error();
|
| ++ #endif /* TIOCSCTTY */
|
| ++ fd = open(slave_name, O_RDWR);
|
| ++ if (fd < 0) {
|
| ++ return posix_error();
|
| ++ } else {
|
| ++ close(fd);
|
| ++ }
|
| ++ /* Verify that we now have a controlling tty. */
|
| ++ fd = open("/dev/tty", O_WRONLY);
|
| ++ if (fd < 0)
|
| ++ return posix_error();
|
| ++ else {
|
| ++ close(fd);
|
| ++ }
|
| ++ (void) close(master_fd);
|
| ++ (void) dup2(slave, 0);
|
| ++ (void) dup2(slave, 1);
|
| ++ (void) dup2(slave, 2);
|
| ++ if (slave > 2)
|
| ++ (void) close(slave);
|
| ++ pid = 0;
|
| ++ break;
|
| ++ defautlt:
|
| ++ /*
|
| ++ * parent
|
| ++ */
|
| ++ (void) close(slave);
|
| ++ }
|
| ++ #else
|
| + pid = forkpty(&master_fd, NULL, NULL, NULL);
|
| ++ #endif
|
| + if (pid == -1)
|
| + return posix_error();
|
| + if (pid == 0)
|
| +***************
|
| +*** 5607,5616 ****
|
| + #ifdef HAVE_FORK
|
| + {"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__},
|
| + #endif /* HAVE_FORKPTY */
|
| + #ifdef HAVE_GETEGID
|
| +--- 5706,5715 ----
|
| + #ifdef HAVE_FORK
|
| + {"fork", posix_fork, METH_VARARGS, posix_fork__doc__},
|
| + #endif /* HAVE_FORK */
|
| +! #if defined(HAVE_OPENPTY) || defined(HAVE__GETPTY) || defined(sun)
|
| + {"openpty", posix_openpty, METH_VARARGS, posix_openpty__doc__},
|
| + #endif /* HAVE_OPENPTY || HAVE__GETPTY */
|
| +! #if defined(HAVE_FORKPTY) || defined(sun)
|
| + {"forkpty", posix_forkpty, METH_VARARGS, posix_forkpty__doc__},
|
| + #endif /* HAVE_FORKPTY */
|
| + #ifdef HAVE_GETEGID
|
|
|