From 13294f95172c68a5e77143f917231e0f17f37537 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Wed, 1 Aug 2012 21:14:48 -0700 Subject: [PATCH] Port to Solaris 8. Without this change, 'configure' fails because the recently-added wait3 prototype in config.h messes up later 'configure' tests. Fix this problem by droping wait3 and WRETCODE, as they're no longer needed on hosts that are current porting targets. * configure.ac (wait3, WRETCODE): Remove, fixing a FIXME. All uses changed to waitpid and WEXITSTATUS. * src/syswait.h (WRETCODE): Remove, consistently with ../configure.ac. --- ChangeLog | 8 ++++++++ admin/CPP-DEFINES | 1 - admin/ChangeLog | 5 +++++ configure.ac | 17 ----------------- lib-src/movemail.c | 4 ++-- src/ChangeLog | 5 +++++ src/process.c | 14 +++++++------- src/sysdep.c | 2 +- src/syswait.h | 5 ----- src/w32proc.c | 2 +- 10 files changed, 29 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index 943d88822db..21d1d25d6de 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2012-08-02 Paul Eggert + Port to Solaris 8. + Without this change, 'configure' fails because the recently-added + wait3 prototype in config.h messes up later 'configure' tests. + Fix this problem by droping wait3 and WRETCODE, as they're + no longer needed on hosts that are current porting targets. + * configure.ac (wait3, WRETCODE): Remove, fixing a FIXME. + All uses changed to waitpid and WEXITSTATUS. + Avoid needless autoheader after autogen.sh. * src/stamp-h.in: Remove from bzr repository; no longer needed there. * .bzrignore: Add it. diff --git a/admin/CPP-DEFINES b/admin/CPP-DEFINES index 47963edecab..f020a7d3a3f 100644 --- a/admin/CPP-DEFINES +++ b/admin/CPP-DEFINES @@ -227,7 +227,6 @@ USG USG5 USG_SUBTTY_WORKS VALBITS -WRETCODE XOS_NEEDS_TIME_H _AIX _ARCH_PPC64 diff --git a/admin/ChangeLog b/admin/ChangeLog index 54ac7b4edd7..bc1b4247d3f 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,3 +1,8 @@ +2012-08-02 Paul Eggert + + Port to Solaris 8. + * CPP-DEFINES (WRETCODE): Remove. + 2012-08-01 Dmitry Antipov * coccinelle/overlay.cocci: Semantic patch to replace direct diff --git a/configure.ac b/configure.ac index 24a0bae56b8..a80cb37bc11 100644 --- a/configure.ac +++ b/configure.ac @@ -3692,23 +3692,6 @@ case $opsys in ;; esac -dnl Used in process.c. -case $opsys in - irix6-5 | sol2* | unixware ) - dnl It is possible to receive SIGCHLD when there are no children - dnl waiting, because a previous waitsys(2) cleaned up the carcass - dnl of child without clearing the SIGCHLD pending info. So, use a - dnl non-blocking wait3 instead, which maps to waitpid(2) in SysVr4. - AC_DEFINE(wait3(status, options, rusage), - [waitpid ((pid_t) -1, (status), (options))], - [Some platforms redefine this.]) - dnl FIXME this makes no sense, because WRETCODE is only used in - dnl process.c, which includes syswait.h aftet config.h, and the - dnl former unconditionally redefines WRETCODE. - AC_DEFINE(WRETCODE(w), [(w >> 8)], [Some platforms redefine this.]) - ;; -esac - case $opsys in hpux* | sol2* ) diff --git a/lib-src/movemail.c b/lib-src/movemail.c index d157aa8c0b9..c87d97778d1 100644 --- a/lib-src/movemail.c +++ b/lib-src/movemail.c @@ -560,8 +560,8 @@ main (int argc, char **argv) wait (&wait_status); if (!WIFEXITED (wait_status)) exit (EXIT_FAILURE); - else if (WRETCODE (wait_status) != 0) - exit (WRETCODE (wait_status)); + else if (WEXITSTATUS (wait_status) != 0) + exit (WEXITSTATUS (wait_status)); #if !defined (MAIL_USE_MMDF) && !defined (MAIL_USE_SYSTEM_LOCK) #ifdef MAIL_USE_MAILLOCK diff --git a/src/ChangeLog b/src/ChangeLog index e10550957c8..50c6d18e242 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2012-08-02 Paul Eggert + + Port to Solaris 8. + * syswait.h (WRETCODE): Remove, consistently with ../configure.ac. + 2012-08-02 Glenn Morris * nsterm.m (ns_exec_path, ns_load_path): Use SEPCHAR rather than diff --git a/src/process.c b/src/process.c index 47f10814333..2d2a1b5ac0e 100644 --- a/src/process.c +++ b/src/process.c @@ -441,7 +441,7 @@ status_convert (int w) if (WIFSTOPPED (w)) return Fcons (Qstop, Fcons (make_number (WSTOPSIG (w)), Qnil)); else if (WIFEXITED (w)) - return Fcons (Qexit, Fcons (make_number (WRETCODE (w)), + return Fcons (Qexit, Fcons (make_number (WEXITSTATUS (w)), WCOREDUMP (w) ? Qt : Qnil)); else if (WIFSIGNALED (w)) return Fcons (Qsignal, Fcons (make_number (WTERMSIG (w)), @@ -4287,7 +4287,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, FD_ZERO (&Writeok); if (time_limit == 0 && nsecs == 0 && wait_proc && !NILP (Vinhibit_quit) - && !(CONSP (PVAR (wait_proc, status)) + && !(CONSP (PVAR (wait_proc, status)) && EQ (XCAR (PVAR (wait_proc, status)), Qexit))) message ("Blocking call to accept-process-output with quit inhibited!!"); @@ -4887,7 +4887,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, if (p->pid == -2) { /* If the EIO occurs on a pty, sigchld_handler's - wait3() will not find the process object to + waitpid() will not find the process object to delete. Do it here. */ p->tick = ++process_tick; PVAR (p, status) = Qfailed; @@ -4959,7 +4959,7 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd, if (xerrno) { p->tick = ++process_tick; - PVAR (p, status) + PVAR (p, status) = Fcons (Qfailed, Fcons (make_number (xerrno), Qnil)); deactivate_process (proc); } @@ -6352,7 +6352,7 @@ sigchld_handler (int signo) do { errno = 0; - pid = wait3 (&w, WNOHANG | WUNTRACED, 0); + pid = waitpid (-1, &w, WNOHANG | WUNTRACED); } while (pid < 0 && errno == EINTR); @@ -6440,7 +6440,7 @@ sigchld_handler (int signo) /* Report the status of the synchronous process. */ if (WIFEXITED (w)) - synch_process_retcode = WRETCODE (w); + synch_process_retcode = WEXITSTATUS (w); else if (WIFSIGNALED (w)) synch_process_termsig = WTERMSIG (w); @@ -6746,7 +6746,7 @@ suppressed. */) CHECK_PROCESS (process); p = XPROCESS (process); if (NILP (flag)) - PVAR (p, decode_coding_system) + PVAR (p, decode_coding_system) = raw_text_coding_system (PVAR (p, decode_coding_system)); setup_process_coding_systems (process); diff --git a/src/sysdep.c b/src/sysdep.c index 2bfdb35fdfb..597228c3de6 100644 --- a/src/sysdep.c +++ b/src/sysdep.c @@ -294,7 +294,7 @@ wait_for_termination_1 (pid_t pid, int interruptible) #if (defined (BSD_SYSTEM) || defined (HPUX)) && !defined (__GNU__) /* Note that kill returns -1 even if the process is just a zombie now. But inevitably a SIGCHLD interrupt should be generated - and child_sig will do wait3 and make the process go away. */ + and child_sig will do waitpid and make the process go away. */ /* There is some indication that there is a bug involved with termination of subprocesses, perhaps involving a kernel bug too, but no idea what it is. Just as a hunch we signal SIGCHLD to see diff --git a/src/syswait.h b/src/syswait.h index aea9ea6e588..9d84876d4be 100644 --- a/src/syswait.h +++ b/src/syswait.h @@ -51,9 +51,4 @@ along with GNU Emacs. If not, see . */ #define WTERMSIG(status) ((status) & 0x7f) #endif -#undef WRETCODE -#define WRETCODE(status) WEXITSTATUS (status) - - #endif /* EMACS_SYSWAIT_H */ - diff --git a/src/w32proc.c b/src/w32proc.c index cfc82fa2c47..33aed5eb8e3 100644 --- a/src/w32proc.c +++ b/src/w32proc.c @@ -549,7 +549,7 @@ sys_wait (int *status) /* Report the status of the synchronous process. */ if (WIFEXITED (retval)) - synch_process_retcode = WRETCODE (retval); + synch_process_retcode = WEXITSTATUS (retval); else if (WIFSIGNALED (retval)) { int code = WTERMSIG (retval);