* bug#12800: Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
@ 2012-11-04 19:25 Paul Eggert
2012-11-04 19:48 ` Eli Zaretskii
0 siblings, 1 reply; 3+ messages in thread
From: Paul Eggert @ 2012-11-04 19:25 UTC (permalink / raw)
To: 12800
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
\f
-/* 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 */
-\f
/* 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;
-
\f
#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.
^ permalink raw reply [flat|nested] 3+ messages in thread
* bug#12800: Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
2012-11-04 19:25 bug#12800: Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid Paul Eggert
@ 2012-11-04 19:48 ` Eli Zaretskii
2012-11-05 3:21 ` Paul Eggert
0 siblings, 1 reply; 3+ messages in thread
From: Eli Zaretskii @ 2012-11-04 19:48 UTC (permalink / raw)
To: Paul Eggert; +Cc: 12800
> Date: Sun, 04 Nov 2012 11:25:55 -0800
> From: Paul Eggert <eggert@cs.ucla.edu>
>
> @@ -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. */
The removal of the #ifndef will need a tcgetpgrp emulation for DOS_NT
platforms, I think.
Otherwise, I see no problems with this.
Thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
* bug#12800: Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid.
2012-11-04 19:48 ` Eli Zaretskii
@ 2012-11-05 3:21 ` Paul Eggert
0 siblings, 0 replies; 3+ messages in thread
From: Paul Eggert @ 2012-11-05 3:21 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 12800-done
On 11/04/2012 11:48 AM, Eli Zaretskii wrote:
> The removal of the #ifndef will need a tcgetpgrp emulation for DOS_NT
> platforms, I think.
>
> Otherwise, I see no problems with this.
Thanks, I made that change, installed the patch as
trunk bzr 110801, and am marking this as done.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-11-05 3:21 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-04 19:25 bug#12800: Assume at least POSIX.1-1988 for getpgrp, setpgid, setsid Paul Eggert
2012-11-04 19:48 ` Eli Zaretskii
2012-11-05 3:21 ` Paul Eggert
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).