🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Richard Kuhns Tue, 10 Jan 1989 20:14
Yet another patch for GNUmake 3.27 for SYSV
#1448
Author: Richard Kuhns
Date: Tue, 10 Jan 1989 20:14
183 lines
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