update_ptytty
authorroot <root>
Mon, 5 May 2008 16:51:52 +0000 (16:51 +0000)
committerroot <root>
Mon, 5 May 2008 16:51:52 +0000 (16:51 +0000)
Changes
config.h.in
configure
ptytty.m4
src/logging.C
src/ptytty.C

diff --git a/Changes b/Changes
index a227cc4..f826a67 100644 (file)
--- a/Changes
+++ b/Changes
@@ -24,6 +24,8 @@ TODO: rxvt -font 10x20 -xrm "*.tabbed.font: 10x20" -pe tabbed
       how does one affect the tab windows themselves? seems not to work anymore.
 
 TODO: implement initial chdir for tabs by making it a resource?
+       - work around fedore 9 prividing isastream but not the relevant
+          header file for it (report by Tuncer Ayaz).
        - upgrade to libev-3.31, fixing a bug in the select backend
           with more than 31 file descriptors on non-linux 64 bit systems.
        - correctly reset the multibyte state to the initial one
index f2322d3..11280a5 100644 (file)
@@ -67,6 +67,9 @@
 /* Define to 1 if you have the `epoll_ctl' function. */
 #undef HAVE_EPOLL_CTL
 
+/* Define to 1 if you have the `eventfd' function. */
+#undef HAVE_EVENTFD
+
 /* Define to 1 if you have the `getpt' function. */
 #undef HAVE_GETPT
 
 /* Define to 1 if you have the <string.h> header file. */
 #undef HAVE_STRING_H
 
+/* Define to 1 if you have the <stropts.h> header file. */
+#undef HAVE_STROPTS_H
+
 /* Define if utmp.h or lastlog.h has struct lastlog */
 #undef HAVE_STRUCT_LASTLOG
 
 /* Define to 1 if you have the <sys/epoll.h> header file. */
 #undef HAVE_SYS_EPOLL_H
 
+/* Define to 1 if you have the <sys/eventfd.h> header file. */
+#undef HAVE_SYS_EVENTFD_H
+
 /* Define to 1 if you have the <sys/event.h> header file. */
 #undef HAVE_SYS_EVENT_H
 
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
+/* Define to 1 if you have the `ttyslot' function. */
+#undef HAVE_TTYSLOT
+
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
 /* Define to 1 if you have the `unsetenv' function. */
 #undef HAVE_UNSETENV
 
-/* Define to 1 if you have the `updlastlogx' function. */
-#undef HAVE_UPDLASTLOGX
-
 /* Define to 1 if you have the `updwtmp' function. */
 #undef HAVE_UPDWTMP
 
 /* Define location of lastlog */
 #undef LASTLOG_FILE
 
+/* Define if lastlog is provided via a directory */
+#undef LASTLOG_IS_DIR
+
 /* Define if you want to have lastlog support when utmp/utmpx is enabled */
 #undef LASTLOG_SUPPORT
 
index 4a838f1..b8291eb 100755 (executable)
--- a/configure
+++ b/configure
@@ -5325,7 +5325,8 @@ done
 
 
 
-for ac_header in sys/inotify.h sys/epoll.h sys/event.h sys/queue.h port.h poll.h sys/select.h
+
+for ac_header in sys/inotify.h sys/epoll.h sys/event.h sys/queue.h port.h poll.h sys/select.h sys/eventfd.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -5471,7 +5472,8 @@ done
 
 
 
-for ac_func in inotify_init epoll_ctl kqueue port_create poll select
+
+for ac_func in inotify_init epoll_ctl kqueue port_create poll select eventfd
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 { echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -8558,9 +8560,9 @@ fi
 
 
 for ac_func in \
+       ttyslot \
        updwtmp \
        updwtmpx \
-       updlastlogx \
 
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -9991,6 +9993,13 @@ cat >>confdefs.h <<_ACEOF
 #define LASTLOG_FILE "$path_lastlog"
 _ACEOF
 
+  if test -d "$path_lastlog"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define LASTLOG_IS_DIR 1
+_ACEOF
+
+  fi
 fi
 
 { echo "$as_me:$LINENO: checking where lastlogx is located" >&5
 
 
 
+
 for ac_header in \
   pty.h \
   util.h \
   libutil.h \
   sys/ioctl.h \
   sys/stropts.h \
+  stropts.h \
 
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
index c5400c9..a05d50c 100644 (file)
--- a/ptytty.m4
+++ b/ptytty.m4
@@ -9,6 +9,7 @@ AC_CHECK_HEADERS( \
   libutil.h \
   sys/ioctl.h \
   sys/stropts.h \
+  stropts.h \
 )
 
 AC_CHECK_FUNCS( \
@@ -65,8 +66,8 @@ esac
 
 if test x$ac_cv_func_getpt = xyes -o x$ac_cv_func_posix_openpt = xyes -o x$have_clone = xyes; then
   AC_MSG_CHECKING(for UNIX98 ptys)
-  AC_TRY_LINK([#include <stdlib.h>],
-              [grantpt(0);unlockpt(0);ptsname(0);],
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>]],
+              [[grantpt(0);unlockpt(0);ptsname(0);]])],
               [unix98_pty=yes
                AC_DEFINE(UNIX98_PTY, 1, "")
                AC_MSG_RESULT(yes)],
@@ -118,11 +119,7 @@ AC_CHECK_FUNCS( \
        updlastlogx \
 )
 
-AC_CHECK_HEADERS( \
-       utmp.h \
-       utmpx.h \
-       lastlog.h \
-)
+AC_CHECK_HEADERS(lastlog.h)
 
 dnl# --------------------------------------------------------------------------
 dnl# DO ALL UTMP AND WTMP CHECKING
@@ -130,7 +127,7 @@ dnl# --------------------------------------------------------------------------
 dnl# check for host field in utmp structure
 
 dnl# --------------------------------------------
-AC_CHECK_HEADER(utmp.h,
+AC_CHECK_HEADERS(utmp.h,
 [AC_CACHE_CHECK([for struct utmp], struct_utmp,
 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
 #include <utmp.h>]], [[struct utmp ut;]])],[struct_utmp=yes],[struct_utmp=no])])
@@ -152,11 +149,11 @@ AC_CACHE_CHECK(for ut_pid in utmp struct, struct_utmp_pid,
 if test x$struct_utmp_pid = xyes; then
   AC_DEFINE(HAVE_UTMP_PID, 1, Define if struct utmp contains ut_pid)
 fi
-) dnl# AC_CHECK_HEADER(utmp.h
+) dnl# AC_CHECK_HEADERS(utmp.h
 
 dnl# --------------------------------------------
 
-AC_CHECK_HEADER(utmpx.h,
+AC_CHECK_HEADERS(utmpx.h,
 [AC_CACHE_CHECK([for struct utmpx], struct_utmpx,
 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
 #include <utmpx.h>]], [[struct utmpx ut;]])],[struct_utmpx=yes],[struct_utmpx=no])])
@@ -173,14 +170,12 @@ if test x$struct_utmpx_host = xyes; then
 fi
 
 AC_CACHE_CHECK(for session in utmpx struct, struct_utmpx_session,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <utmpx.h>],
-[struct utmpx utx; utx.ut_session;],
-struct_utmpx_session=yes, struct_utmpx_session=no)])
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+#include <utmpx.h>]], [[struct utmpx utx; utx.ut_session;]])],[struct_utmpx_session=yes],[struct_utmpx_session=no])])
 if test x$struct_utmpx_session = xyes; then
   AC_DEFINE(HAVE_UTMPX_SESSION, 1, Define if struct utmpx contains ut_session)
 fi
-) dnl# AC_CHECK_HEADER(utmpx.h
+) dnl# AC_CHECK_HEADERS(utmpx.h
 
 dnl# --------------------------------------------------------------------------
 dnl# check for struct lastlog
@@ -446,12 +441,12 @@ fi
 AC_DEFUN([SCM_RIGHTS_CHECK],
 [
 AC_CACHE_CHECK(for unix-compliant filehandle passing ability, can_pass_fds,
-[AC_TRY_LINK([
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 #include <cstddef> // broken bsds (is that redundant?) need this
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/uio.h>
-],[
+]], [[
 {
   msghdr msg;
   iovec iov;
@@ -475,7 +470,7 @@ AC_CACHE_CHECK(for unix-compliant filehandle passing ability, can_pass_fds,
 
   return sendmsg (3, &msg, 0);
 }
-],[can_pass_fds=yes],[can_pass_fds=no])])
+]])],[can_pass_fds=yes],[can_pass_fds=no])])
 if test x$can_pass_fds = xyes; then
    AC_DEFINE(HAVE_UNIX_FDPASS, 1, Define if sys/socket.h defines the necessary macros/functions for file handle passing)
 else
@@ -486,7 +481,7 @@ fi
 AC_DEFUN([TTY_GROUP_CHECK],
 [
 AC_CACHE_CHECK([for tty group], tty_group,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
@@ -506,8 +501,7 @@ main()
     return 0;
   else
     return 1;
-}],
-[tty_group=yes],[tty_group=no],[tty_group=no])])
+}]])],[tty_group=yes],[tty_group=no],[tty_group=no])])
 if test x$tty_group = xyes; then
   AC_DEFINE(TTY_GID_SUPPORT, 1, "")
 fi])
index 8f04607..c9106bb 100644 (file)
@@ -48,6 +48,7 @@
 #include <fcntl.h>
 #include <unistd.h>
 #include <time.h>
+#include <errno.h>
 
 /*
  * BSD style utmp entry
index 989b2a5..37a0270 100644 (file)
@@ -34,6 +34,7 @@
 #include <csignal>
 
 #include <sys/types.h>
+#include <sys/stat.h>
 #include <unistd.h>
 #include <fcntl.h>
 
@@ -43,7 +44,7 @@
 #if defined(HAVE_DEV_PTMX) && defined(HAVE_SYS_STROPTS_H)
 # include <sys/stropts.h>      /* for I_PUSH */
 #endif
-#ifdef HAVE_ISASTREAM
+#if defined(HAVE_ISASTREAM) && defined(HAVE_STROPTS_H)
 # include <stropts.h>
 #endif
 #if defined(HAVE_PTY_H)
 
     slave = _getpty (&pfd, O_RDWR | O_NONBLOCK | O_NOCTTY, 0622, 0);
 
-    if (slave != NULL) {
-      *ttydev = strdup (slave);
-      return pfd;
-    }
+    if (slave != NULL)
+      {
+        *ttydev = strdup (slave);
+        return pfd;
+      }
 
     return -1;
   }
@@ -248,7 +250,7 @@ control_tty (int fd_tty)
    * close () - on the master side which causes a hang up to be sent
    * through - Geoff Wing
    */
-# ifdef HAVE_ISASTREAM
+#if defined(HAVE_ISASTREAM) && defined(HAVE_STROPTS_H)
   if (isastream (fd_tty) == 1)
 # endif
     {