bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#12800: Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.


From: Paul Eggert
Subject: bug#12800: Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
Date: Sun, 04 Nov 2012 11:25:55 -0800
User-agent: Mozilla/5.0 (X11; Linux i686; rv:16.0) Gecko/20121028 Thunderbird/16.0.2

Tags: patch

This is a proposed code-cleanup patch that arose from a discussion
with Eli Zaretskii.  Tested on GNU/Linux and on Solaris.

=== modified file 'ChangeLog'
--- ChangeLog   2012-11-03 20:48:03 +0000
+++ ChangeLog   2012-11-04 19:22:04 +0000
@@ -1,3 +1,9 @@
+2012-11-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
+       * configure.ac (setpgid, setsid): Assume their existence.
+       (AC_FUNC_GETPGRP, SETPGRP_RELEASES_CTTY): Remove; obsolete.
+
 2012-11-03  Eli Zaretskii  <eliz@gnu.org>
 
        * lib/makefile.w32-in (GNULIBOBJS): Add $(BLD)/fpending.$(O) and

=== modified file 'admin/CPP-DEFINES'
--- admin/CPP-DEFINES   2012-09-16 21:43:55 +0000
+++ admin/CPP-DEFINES   2012-11-04 19:22:04 +0000
@@ -298,9 +298,7 @@
 HAVE_SEQPACKET
 HAVE_SETITIMER
 HAVE_SETLOCALE
-HAVE_SETPGID
 HAVE_SETRLIMIT
-HAVE_SETSID
 HAVE_SHARED_GAME_DIR
 HAVE_SHUTDOWN
 HAVE_SIGNED_${GLTYPE}
@@ -433,7 +431,6 @@
 PTY_TTY_NAME_SPRINTF
 PURESIZE
 RUN_TIME_REMAP
-SETPGRP_RELEASES_CTTY
 SETUP_SLAVE_PTY
 SIGALRM
 SIGCHLD

=== modified file 'admin/ChangeLog'
--- admin/ChangeLog     2012-11-03 19:19:05 +0000
+++ admin/ChangeLog     2012-11-04 19:22:04 +0000
@@ -1,3 +1,9 @@
+2012-11-04  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
+       * CPP-DEFINES (HAVE_SETPGID, HAVE_SETSID, SETPGRP_RELEASES_CTTY):
+       Remove; obsolete.
+
 2012-11-03  Glenn Morris  <rgm@gnu.org>
 
        * admin.el (set-copyright): Add msdos/sed2v2.inp.

=== modified file 'configure.ac'
--- configure.ac        2012-11-02 00:48:12 +0000
+++ configure.ac        2012-11-04 19:22:04 +0000
@@ -2871,9 +2871,9 @@
 
 AC_CHECK_FUNCS(gethostname \
 closedir getrusage get_current_dir_name \
-lrand48 setsid \
+lrand48 \
 fpathconf select euidaccess getpagesize setlocale \
-utimes getrlimit setrlimit setpgid getcwd shutdown getaddrinfo \
+utimes getrlimit setrlimit getcwd shutdown getaddrinfo \
 __fpending strsignal setitimer \
 sendto recvfrom getsockname getpeername getifaddrs freeifaddrs \
 gai_strerror mkstemp getline getdelim fsync sync \
@@ -2916,8 +2916,6 @@
 
 AC_FUNC_FSEEKO
 
-AC_FUNC_GETPGRP
-
 # UNIX98 PTYs.
 AC_CHECK_FUNCS(grantpt)
 
@@ -4058,8 +4056,6 @@
   irix6-5)
     AC_DEFINE(PREFER_VSUSP, 1, [Define if process_send_signal should
       use VSUSP instead of VSWTCH.])
-    AC_DEFINE(SETPGRP_RELEASES_CTTY, 1, [Define if process.c:child_setup
-      should not call setpgrp.])
     ;;
 
   sol2-10)

=== modified file 'src/ChangeLog'
--- src/ChangeLog       2012-11-04 17:29:52 +0000
+++ src/ChangeLog       2012-11-04 19:22:04 +0000
@@ -1,5 +1,23 @@
 2012-11-04  Paul Eggert  <eggert@cs.ucla.edu>
 
+       Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
+       This removes code that has been obsolete since around 1990.
+       * callproc.c (Fcall_process):
+       * emacs.c (main):
+       * process.c (create_process):
+       * term.c (dissociate_if_controlling_tty):
+       Assume setsid exists.
+       * callproc.c (child_setup): Assume setpgid exists and behaves as
+       per POSIX.1-1988 or later.
+       * conf_post.h (setpgid) [!HAVE_SETPGID]: Remove.
+       * emacs.c (shut_down_emacs):
+       * sysdep.c (sys_suspend, init_foreground_group):
+       Assume getpgrp behaves as per POSIX.1-1998 or later.
+       * msdos.c (setpgrp): Remove.
+       (setpgid, setsid): New functions.
+       * systty.h (EMACS_GETPGRP): Remove.  All callers now use getpgrp.
+       * term.c (no_controlling_tty): Remove; unused.
+
        Fix data-loss with --version (Bug#9574).
        * emacs.c (close_output_streams): Use strerror, not emacs_strerror,
        as we can't assume that emacs_strerror is initialized, and strerror

=== modified file 'src/callproc.c'
--- src/callproc.c      2012-10-31 17:27:29 +0000
+++ src/callproc.c      2012-11-04 19:22:04 +0000
@@ -612,11 +612,7 @@
        if (fd[0] >= 0)
          emacs_close (fd[0]);
 
-#ifdef HAVE_SETSID
        setsid ();
-#else
-       setpgid (0, 0);
-#endif
 
        /* Emacs ignores SIGPIPE, but the child should not.  */
        signal (SIGPIPE, SIG_DFL);
@@ -1286,11 +1282,7 @@
   if (err != in && err != out)
     emacs_close (err);
 
-#if defined HAVE_SETPGID || ! (defined USG && defined SETPGRP_RELEASES_CTTY)
-  setpgid (pid, pid);
-#endif
-
-  /* setpgrp_of_tty is incorrect here; it uses input_fd.  */
+  setpgid (0, 0);
   tcsetpgrp (0, pid);
 
   /* execvp does not accept an environment arg so the only way

=== modified file 'src/conf_post.h'
--- src/conf_post.h     2012-11-03 13:48:33 +0000
+++ src/conf_post.h     2012-11-04 19:22:04 +0000
@@ -121,14 +121,6 @@
 
 #define emacs_raise(sig) msdos_fatal_signal (sig)
 
-#ifndef HAVE_SETPGID
-# ifdef USG
-#  define setpgid(pid, pgid) setpgrp ()
-# else
-#  define setpgid(pid, pgid) setpgrp (pid, pgid)
-# endif
-#endif
-
 /* Define one of these for easier conditionals.  */
 #ifdef HAVE_X_WINDOWS
 /* We need a little extra space, see ../../lisp/loadup.el and the

=== modified file 'src/emacs.c'
--- src/emacs.c 2012-11-04 17:29:52 +0000
+++ src/emacs.c 2012-11-04 19:22:04 +0000
@@ -1101,9 +1101,7 @@
         that it is not accessible to programs started from .emacs.  */
       fcntl (daemon_pipe[1], F_SETFD, FD_CLOEXEC);
 
-#ifdef HAVE_SETSID
       setsid ();
-#endif
 #else /* DOS_NT */
       fprintf (stderr, "This platform does not support the -daemon flag.\n");
       exit (1);
@@ -1915,7 +1913,7 @@
   /* If we are controlling the terminal, reset terminal modes.  */
 #ifndef DOS_NT
   {
-    pid_t pgrp = EMACS_GETPGRP (0);
+    pid_t pgrp = getpgrp ();
     pid_t tpgrp = tcgetpgrp (0);
     if ((tpgrp != -1) && tpgrp == pgrp)
       {

=== modified file 'src/msdos.c'
--- src/msdos.c 2012-11-03 13:48:33 +0000
+++ src/msdos.c 2012-11-04 19:22:04 +0000
@@ -3927,8 +3927,9 @@
 /*
  * A few unimplemented functions that we silently ignore.
  */
-int setpgrp (void) {return 0; }
+int setpgid (int pid, int pgid) { return 0; }
 int setpriority (int x, int y, int z) { return 0; }
+pid_t setsid (void) { return 0; }
 
 #if __DJGPP__ == 2 && __DJGPP_MINOR__ < 4
 ssize_t

=== modified file 'src/process.c'
--- src/process.c       2012-11-03 18:32:41 +0000
+++ src/process.c       2012-11-04 19:22:04 +0000
@@ -1739,7 +1739,6 @@
       /* Make the pty be the controlling terminal of the process.  */
 #ifdef HAVE_PTYS
       /* First, disconnect its current controlling terminal.  */
-#ifdef HAVE_SETSID
       /* We tried doing setsid only if pty_flag, but it caused
         process_set_signal to fail on SGI when using a pipe.  */
       setsid ();
@@ -1752,12 +1751,6 @@
          ioctl (xforkin, TIOCSCTTY, 0);
 #endif
        }
-#else /* not HAVE_SETSID */
-      /* It's very important to call setpgid here and no time
-        afterwards.  Otherwise, we lose our controlling tty which
-        is set when we open the pty. */
-      setpgid (0, 0);
-#endif /* not HAVE_SETSID */
 #if defined (LDISC1)
       if (pty_flag && xforkin >= 0)
        {
@@ -1790,22 +1783,15 @@
              ioctl (j, TIOCNOTTY, 0);
              emacs_close (j);
            }
-#ifndef USG
-         /* In order to get a controlling terminal on some versions
-            of BSD, it is necessary to put the process in pgrp 0
-            before it opens the terminal.  */
-         setpgid (0, 0);
-#endif
        }
 #endif /* TIOCNOTTY */
 
 #if !defined (DONT_REOPEN_PTY)
 /*** There is a suggestion that this ought to be a
-     conditional on TIOCSPGRP,
-     or !(defined (HAVE_SETSID) && defined (TIOCSCTTY)).
+     conditional on TIOCSPGRP, or !defined TIOCSCTTY.
      Trying the latter gave the wrong results on Debian GNU/Linux 1.1;
      that system does seem to need this code, even though
-     both HAVE_SETSID and TIOCSCTTY are defined.  */
+     both TIOCSCTTY is defined.  */
        /* Now close the pty (if we had it open) and reopen it.
           This makes the pty the controlling terminal of the subprocess.  */
       if (pty_flag)

=== modified file 'src/sysdep.c'
--- src/sysdep.c        2012-10-31 17:27:29 +0000
+++ src/sysdep.c        2012-11-04 19:22:04 +0000
@@ -452,7 +452,7 @@
 #if defined (SIGTSTP) && !defined (MSDOS)
 
   {
-    pid_t pgrp = EMACS_GETPGRP (0);
+    pid_t pgrp = getpgrp ();
     EMACS_KILLPG (pgrp, SIGTSTP);
   }
 
@@ -709,7 +709,7 @@
 void
 init_foreground_group (void)
 {
-  pid_t pgrp = EMACS_GETPGRP (0);
+  pid_t pgrp = getpgrp ();
   inherited_pgroup = getpid () == pgrp ? 0 : pgrp;
 }
 

=== modified file 'src/systty.h'
--- src/systty.h        2012-09-13 02:21:28 +0000
+++ src/systty.h        2012-11-04 19:22:04 +0000
@@ -63,16 +63,6 @@
 #endif
 
 
-/* Manipulate a terminal's current process group.  */
-
-/* EMACS_GETPGRP (arg) returns the process group of the process.  */
-
-#if defined (GETPGRP_VOID)
-#  define EMACS_GETPGRP(x) getpgrp()
-#else /* !GETPGRP_VOID */
-#  define EMACS_GETPGRP(x) getpgrp(x)
-#endif /* !GETPGRP_VOID */
-
 /* Manipulate a TTY's input/output processing parameters.  */
 
 /* struct emacs_tty is a structure used to hold the current tty

=== modified file 'src/term.c'
--- src/term.c  2012-11-03 05:59:17 +0000
+++ src/term.c  2012-11-04 19:22:04 +0000
@@ -133,10 +133,6 @@
 
 static int max_frame_cols;
 
-/* Non-zero if we have dropped our controlling tty and therefore
-   should not open a frame on stdout. */
-static int no_controlling_tty;
-
 
 
 #ifdef HAVE_GPM
@@ -2918,36 +2914,9 @@
 static void
 dissociate_if_controlling_tty (int fd)
 {
-#ifndef DOS_NT
   pid_t pgid = tcgetpgrp (fd); /* If tcgetpgrp succeeds, fd is the ctty. */
-  if (pgid != -1)
-    {
-#if defined (USG5)
-      setpgrp ();
-      no_controlling_tty = 1;
-#elif defined (CYGWIN)
-      setsid ();
-      no_controlling_tty = 1;
-#else
-#ifdef TIOCNOTTY                /* Try BSD ioctls. */
-      sigset_t blocked;
-      sigemptyset (&blocked);
-      sigaddset (&blocked, SIGTTOU);
-      pthread_sigmask (SIG_BLOCK, &blocked, 0);
-      fd = emacs_open (DEV_TTY, O_RDWR, 0);
-      if (fd != -1 && ioctl (fd, TIOCNOTTY, 0) != -1)
-        {
-          no_controlling_tty = 1;
-        }
-      if (fd != -1)
-        emacs_close (fd);
-      pthread_sigmask (SIG_UNBLOCK, &blocked, 0);
-#else
-# error "Unknown system."
-#endif  /* ! TIOCNOTTY */
-#endif  /* ! USG */
-    }
-#endif /* !DOS_NT */
+  if (0 <= pgid)
+    setsid ();
 }
 
 /* Create a termcap display on the tty device with the given name and

=== modified file 'src/w32proc.c'
--- src/w32proc.c       2012-11-01 14:21:45 +0000
+++ src/w32proc.c       2012-11-04 19:22:04 +0000
@@ -230,12 +230,6 @@
   return (*set & (1U << signo)) != 0;
 }
 
-int
-setpgrp (int pid, int gid)
-{
-  return 0;
-}
-
 pid_t
 getpgrp (void)
 {
@@ -248,6 +242,12 @@
   return 0;
 }
 
+pid_t
+setsid (void)
+{
+  return getpid ();
+}
+
 /* Emulations of interval timers.
 
    Limitations: only ITIMER_REAL and ITIMER_PROF are supported.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]