Thread View: gnu.utils.bug
1 messages
1 total messages
Started by Richard Kuhns
Tue, 10 Jan 1989 20:14
Yet another patch for GNUmake 3.27 for SYSV
Author: Richard Kuhns
Date: Tue, 10 Jan 1989 20:14
Date: Tue, 10 Jan 1989 20:14
183 lines
5194 bytes
5194 bytes
I've seen several patches to GNUmake 3.27 for System V drift by, and
I'd like to present my version of the necessary changes to commands.c.
My changes DO trap SIGCLD and DON'T create zombies (at least, I haven't
seen any so far), in order to make it as similar to the Berkeley code
as possible. I'm not going to bother with the changes to the variable
named `index'... note that we never want to SIG_IGN SIGCLD under SYSV,
we want to SIG_DFL so wait() will return a useable value.
*** make-3.27/commands.c Mon Dec 12 18:37:09 1988
--- commands.c Mon Jan 9 11:47:19 1989
***************
*** 22,30
#ifdef USG
#define WAIT_T int
! #define WTERMSIG(x) ((x) & 0xf7)
! #define WCOREDUMP(x) ((x) & 0x01)
! #define WRETCODE(x) ((x) & (0xff >> 8))
#define WIFSIGNALED(x) (WTERMSIG (x) != 0)
#define WIFEXITED(x) (WTERMSIG (x) == 0)
--- 22,30 -----
#ifdef USG
#define WAIT_T int
! #define WTERMSIG(x) ((x) & 0x7f)
! #define WCOREDUMP(x) ((x) & 0x0200)
! #define WRETCODE(x) (((x) >> 8) & 0xff)
#define WIFSIGNALED(x) (WTERMSIG (x) != 0)
#define WIFEXITED(x) (WTERMSIG (x) == 0)
***************
*** 38,43
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/fcntl.h>
#endif /* USG */
--- 38,46 -----
#include <sys/time.h>
#include <sys/resource.h>
+ #ifdef sequent
+ #include <fcntl.h>
+ #else
#include <sys/fcntl.h>
#endif /* sequent */
#endif /* USG */
***************
*** 39,44
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/fcntl.h>
#endif /* USG */
--- 42,48 -----
#include <fcntl.h>
#else
#include <sys/fcntl.h>
+ #endif /* sequent */
#endif /* USG */
***************
*** 151,157
if (children == 0 && shell_function_pid <= 0)
return 0;
! while (wait (&status) > 0)
#else /* not USG */
while ((sig <= 0
? (pid = wait (&status))
--- 155,161 -----
if (children == 0 && shell_function_pid <= 0)
return 0;
! while ((pid = wait (&status)) > 0)
#else /* not USG */
while ((sig <= 0
? (pid = wait (&status))
***************
*** 165,171
if (pid == shell_function_pid)
{
shell_function_pid
! = (WIFEXITED (status) && status.w_retcode == 127) ? -1 : 0;
if (sig < 0 && ++dead_children > -sig)
return 0;
--- 169,175 -----
if (pid == shell_function_pid)
{
shell_function_pid
! = (WIFEXITED (status) && WRETCODE(status) == 127) ? -1 : 0;
if (sig < 0 && ++dead_children > -sig)
return 0;
***************
*** 180,187
char buf[100];
if (WIFEXITED (status))
! if (status.w_retcode != 0)
! sprintf (buf, "*** Error %d", status.w_retcode);
else
buf[0] = '\0';
else if (WIFSIGNALED (status))
--- 184,191 -----
char buf[100];
if (WIFEXITED (status))
! if (WRETCODE(status) != 0)
! sprintf (buf, "*** Error %d", WRETCODE(status));
else
buf[0] = '\0';
else if (WIFSIGNALED (status))
***************
*** 186,194
buf[0] = '\0';
else if (WIFSIGNALED (status))
{
! char *cd = status.w_coredump ? " (core dumped)" : "";
! if (status.w_termsig > 0 && status.w_termsig < NSIG)
! sprintf (buf, "*** %s%s", sys_siglist[status.w_termsig], cd);
else
sprintf (buf, "*** Signal %d%s", status.w_termsig, cd);
}
--- 190,198 -----
buf[0] = '\0';
else if (WIFSIGNALED (status))
{
! char *cd = WCOREDUMP(status) ? " (core dumped)" : "";
! if (WTERMSIG(status) > 0 && WTERMSIG(status) < NSIG)
! sprintf (buf, "*** %s%s", sys_siglist[WTERMSIG(status)], cd);
else
sprintf (buf, "*** Signal %d%s", WTERMSIG(status), cd);
}
***************
*** 190,196
if (status.w_termsig > 0 && status.w_termsig < NSIG)
sprintf (buf, "*** %s%s", sys_siglist[status.w_termsig], cd);
else
! sprintf (buf, "*** Signal %d%s", status.w_termsig, cd);
}
else
strcpy (buf, "*** Strange Error");
--- 194,200 -----
if (WTERMSIG(status) > 0 && WTERMSIG(status) < NSIG)
sprintf (buf, "*** %s%s", sys_siglist[WTERMSIG(status)], cd);
else
! sprintf (buf, "*** Signal %d%s", WTERMSIG(status), cd);
}
else
strcpy (buf, "*** Strange Error");
***************
*** 302,308
#ifdef SIGCHLD
(void) signal (SIGCHLD, SIG_IGN);
#else
! (void) signal (SIGCLD, SIG_IGN);
#endif
/* Call child_handler to do the work. */
--- 306,312 -----
#ifdef SIGCHLD
(void) signal (SIGCHLD, SIG_IGN);
#else
! (void) signal (SIGCLD, SIG_DFL);
#endif
/* Call child_handler to do the work. */
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads