libptytty-1.0
authorroot <root>
Tue, 3 Oct 2006 11:21:33 +0000 (11:21 +0000)
committerroot <root>
Tue, 3 Oct 2006 11:21:33 +0000 (11:21 +0000)
Changes
src/libptytty.h
src/ptytty.C

diff --git a/Changes b/Changes
index 72d5b8172abf309f5f302e630da5a6c5038193ab..2a46957fb4b17998c99c5eab704efb1848c46203 100644 (file)
--- 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
index 9b0d9234a41349b94a4cf6fa4a83631da0caa04d..34cb67948897dacab78142026aa4f1bf749b03a9 100644 (file)
@@ -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;
 
index eca2fcb16780aecf40b8deb4b03bb5d6c8bad7c5..d40e9d3d7bb624cff8c003ea8b2d24c1e3809034 100644 (file)
  * 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 ();