From cce1b2c93df4fe235cc631213d54c84701924771 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 3 Oct 2006 11:21:33 +0000 Subject: [PATCH] libptytty-1.0 --- Changes | 1 + src/libptytty.h | 4 +- src/ptytty.C | 215 ++++++++++++++++++++++++++---------------------- 3 files changed, 121 insertions(+), 99 deletions(-) diff --git a/Changes b/Changes index 72d5b817..2a46957f 100644 --- a/Changes +++ b/Changes @@ -38,6 +38,7 @@ TODO: (exg) rxvt -fn -misc-fixed-medium-r-normal--15-140-75-75-c-90-iso10646-1 U - fixed many minor issues reported by Roland Baer. - Leonid Khramov spotted a minor glitch in rxvtfont.C that should not have any consequences, but was buggy nonetheless. + - update to libptytty-1.0. 7.9 Mon Aug 7 18:16:07 CEST 2006 - fix the crashing bug people encountered with 7.8 + urxvtd + perl diff --git a/src/libptytty.h b/src/libptytty.h index 9b0d9234..34cb6794 100644 --- a/src/libptytty.h +++ b/src/libptytty.h @@ -6,7 +6,7 @@ #ifdef __cplusplus -// c++ api +// C++ API struct ptytty { int pty; // pty file descriptor; connected to rxvt @@ -42,7 +42,7 @@ protected: #else -// c api +// C API typedef void *PTYTTY; diff --git a/src/ptytty.C b/src/ptytty.C index eca2fcb1..d40e9d3d 100644 --- a/src/ptytty.C +++ b/src/ptytty.C @@ -70,122 +70,140 @@ * fd_tty _may_ also be set to an open fd to the slave device */ #if defined(UNIX98_PTY) -static int -get_pty (int *fd_tty, char **ttydev) -{ - int pfd; + + static int + get_pty (int *fd_tty, char **ttydev) + { + int pfd; # if defined(HAVE_GETPT) - pfd = getpt(); + pfd = getpt(); # elif defined(HAVE_POSIX_OPENPT) - pfd = posix_openpt (O_RDWR); + pfd = posix_openpt (O_RDWR); # else - pfd = open (CLONE_DEVICE, O_RDWR | O_NOCTTY, 0); + pfd = open (CLONE_DEVICE, O_RDWR | O_NOCTTY, 0); # endif - if (pfd >= 0) - { - if (grantpt (pfd) == 0 /* change slave permissions */ - && unlockpt (pfd) == 0) - { /* slave now unlocked */ - *ttydev = strdup (ptsname (pfd)); /* get slave's name */ - return pfd; - } - close (pfd); - } + if (pfd >= 0) + { + if (grantpt (pfd) == 0 /* change slave permissions */ + && unlockpt (pfd) == 0) + { /* slave now unlocked */ + *ttydev = strdup (ptsname (pfd)); /* get slave's name */ + return pfd; + } + + close (pfd); + } + + return -1; + } - return -1; -} #elif defined(HAVE_OPENPTY) -static int -get_pty (int *fd_tty, char **ttydev) -{ - int pfd; - int res; - char tty_name[32]; - - res = openpty (&pfd, fd_tty, tty_name, NULL, NULL); - if (res != -1) - { - *ttydev = strdup (tty_name); - return pfd; - } - return -1; -} + static int + get_pty (int *fd_tty, char **ttydev) + { + int pfd; + int res; + char tty_name[32]; + + res = openpty (&pfd, fd_tty, tty_name, NULL, NULL); + + if (res != -1) + { + *ttydev = strdup (tty_name); + return pfd; + } + + return -1; + } + #elif defined(HAVE__GETPTY) -static int -get_pty (int *fd_tty, char **ttydev) -{ - int pfd; - *ttydev = _getpty (&pfd, O_RDWR | O_NONBLOCK | O_NOCTTY, 0622, 0); - if (*ttydev != NULL) - return pfd; + static int + get_pty (int *fd_tty, char **ttydev) + { + int pfd; - return -1; -} -#elif defined(HAVE_DEV_PTC) -static int -get_pty (int *fd_tty, char **ttydev) -{ - int pfd; + *ttydev = _getpty (&pfd, O_RDWR | O_NONBLOCK | O_NOCTTY, 0622, 0); - if ((pfd = open ("/dev/ptc", O_RDWR | O_NOCTTY, 0)) >= 0) - { - *ttydev = strdup (ttyname (pfd)); + if (*ttydev != NULL) return pfd; - } - return -1; -} + return -1; + } + +#elif defined(HAVE_DEV_PTC) + + static int + get_pty (int *fd_tty, char **ttydev) + { + int pfd; + + if ((pfd = open ("/dev/ptc", O_RDWR | O_NOCTTY, 0)) >= 0) + { + *ttydev = strdup (ttyname (pfd)); + return pfd; + } + + return -1; + } + #elif defined(HAVE_DEV_CLONE) -static int -get_pty (int *fd_tty, char **ttydev) -{ - int pfd; - if ((pfd = open ("/dev/ptym/clone", O_RDWR | O_NOCTTY, 0)) >= 0) - { - *ttydev = strdup (ptsname (pfd)); - return pfd; - } + static int + get_pty (int *fd_tty, char **ttydev) + { + int pfd; + + if ((pfd = open ("/dev/ptym/clone", O_RDWR | O_NOCTTY, 0)) >= 0) + { + *ttydev = strdup (ptsname (pfd)); + return pfd; + } + + return -1; + } - return -1; -} #else -/* Based on the code in openssh/openbsd-compat/bsd-openpty.c */ -static int -get_pty (int *fd_tty, char **ttydev) -{ - int pfd; - int i; - char pty_name[32]; - char tty_name[32]; - const char *majors = "pqrstuvwxyzabcde"; - const char *minors = "0123456789abcdef"; - for (i = 0; i < 256; i++) - { - snprintf(pty_name, 32, "/dev/pty%c%c", majors[i / 16], minors[i % 16]); - snprintf(tty_name, 32, "/dev/tty%c%c", majors[i / 16], minors[i % 16]); - if ((pfd = open (pty_name, O_RDWR | O_NOCTTY, 0)) == -1) - { - snprintf(pty_name, 32, "/dev/ptyp%d", i); - snprintf(tty_name, 32, "/dev/ttyp%d", i); - if ((pfd = open (pty_name, O_RDWR | O_NOCTTY, 0)) == -1) - continue; - } - if (access (tty_name, R_OK | W_OK) == 0) - { - *ttydev = strdup (tty_name); - return pfd; - } - close (pfd); - } + /* Based on the code in openssh/openbsd-compat/bsd-openpty.c */ + static int + get_pty (int *fd_tty, char **ttydev) + { + int pfd; + int i; + char pty_name[32]; + char tty_name[32]; + const char *majors = "pqrstuvwxyzabcde"; + const char *minors = "0123456789abcdef"; + + for (i = 0; i < 256; i++) + { + snprintf(pty_name, 32, "/dev/pty%c%c", majors[i / 16], minors[i % 16]); + snprintf(tty_name, 32, "/dev/tty%c%c", majors[i / 16], minors[i % 16]); + + if ((pfd = open (pty_name, O_RDWR | O_NOCTTY, 0)) == -1) + { + snprintf(pty_name, 32, "/dev/ptyp%d", i); + snprintf(tty_name, 32, "/dev/ttyp%d", i); + if ((pfd = open (pty_name, O_RDWR | O_NOCTTY, 0)) == -1) + continue; + } + + if (access (tty_name, R_OK | W_OK) == 0) + { + *ttydev = strdup (tty_name); + return pfd; + } + + close (pfd); + } + + return -1; + } - return -1; -} #endif /*----------------------------------------------------------------------*/ @@ -331,8 +349,11 @@ ptytty_unix::~ptytty_unix () void ptytty_unix::put () { - chmod (name, RESTORE_TTY_MODE); - chown (name, 0, ttyconf.gid); + if (name) + { + chmod (name, RESTORE_TTY_MODE); + chown (name, 0, ttyconf.gid); + } close_tty (); -- 2.34.1