Source-Changes-HG archive

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

[src/trunk]: src/bin/ksh ksh: Drop support for OSes without POSIX sigaction(2)



details:   https://anonhg.NetBSD.org/src/rev/df42425d8b06
branches:  trunk
changeset: 825104:df42425d8b06
user:      kamil <kamil%NetBSD.org@localhost>
date:      Fri Jun 30 04:22:22 2017 +0000

description:
ksh: Drop support for OSes without POSIX sigaction(2)

diffstat:

 bin/ksh/Makefile |    6 +-
 bin/ksh/config.h |    5 +-
 bin/ksh/sh.h     |    8 +-
 bin/ksh/sigact.c |  455 -------------------------------------------------------
 bin/ksh/sigact.h |  125 ---------------
 5 files changed, 6 insertions(+), 593 deletions(-)

diffs (truncated from 654 to 300 lines):

diff -r f67696211d6c -r df42425d8b06 bin/ksh/Makefile
--- a/bin/ksh/Makefile  Fri Jun 30 04:11:57 2017 +0000
+++ b/bin/ksh/Makefile  Fri Jun 30 04:22:22 2017 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile,v 1.33 2016/03/16 23:02:23 christos Exp $
+#      $NetBSD: Makefile,v 1.34 2017/06/30 04:22:22 kamil Exp $
 
 WARNS=3
 CWARNFLAGS.clang+=     -Wno-error=cast-qual
@@ -10,8 +10,8 @@
 PROG=  ksh
 SRCS=  alloc.c c_ksh.c c_sh.c c_test.c c_ulimit.c edit.c emacs.c \
        eval.c exec.c expr.c history.c io.c jobs.c lex.c mail.c \
-       main.c misc.c path.c shf.c sigact.c syn.c table.c trap.c \
-       tree.c tty.c var.c version.c vi.c
+       main.c misc.c path.c shf.c syn.c table.c trap.c tree.c tty.c \
+       var.c version.c vi.c
 DPSRCS=        emacs.out siglist.out
 .if (${MKMAN} != "no")
 DPSRCS+=ksh.1
diff -r f67696211d6c -r df42425d8b06 bin/ksh/config.h
--- a/bin/ksh/config.h  Fri Jun 30 04:11:57 2017 +0000
+++ b/bin/ksh/config.h  Fri Jun 30 04:22:22 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: config.h,v 1.52 2017/06/30 04:11:57 kamil Exp $        */
+/*     $NetBSD: config.h,v 1.53 2017/06/30 04:22:22 kamil Exp $        */
 
 /* config.h.  Generated automatically by configure.  */
 /* config.h.in.  Generated automatically from configure.in by autoheader.  */
@@ -30,9 +30,6 @@
 /* Define as the return value of signal handlers (0 or ).  */
 #define RETSIGVAL 
 
-/* Define to use the fake posix signal routines (sigact.[ch]) */
-/* #undef USE_FAKE_SIGACT */
-
 /* Define if you have bsd versions of the setpgrp() and getpgrp() routines */
 /* #undef BSD_PGRP */
 
diff -r f67696211d6c -r df42425d8b06 bin/ksh/sh.h
--- a/bin/ksh/sh.h      Fri Jun 30 04:11:57 2017 +0000
+++ b/bin/ksh/sh.h      Fri Jun 30 04:22:22 2017 +0000
@@ -1,10 +1,10 @@
-/*     $NetBSD: sh.h,v 1.31 2017/06/30 02:51:14 kamil Exp $    */
+/*     $NetBSD: sh.h,v 1.32 2017/06/30 04:22:22 kamil Exp $    */
 
 /*
  * Public Domain Bourne/Korn shell
  */
 
-/* $Id: sh.h,v 1.31 2017/06/30 02:51:14 kamil Exp $ */
+/* $Id: sh.h,v 1.32 2017/06/30 04:22:22 kamil Exp $ */
 
 #include "config.h"    /* system and option configuration info */
 
@@ -80,10 +80,6 @@
 
 typedef        RETSIGTYPE (*handler_t) ARGS((int));    /* signal handler */
 
-#ifdef USE_FAKE_SIGACT
-# include "sigact.h"                   /* use sjg's fake sigaction() */
-#endif
-
 #ifdef HAVE_PATHS_H
 # include <paths.h>
 #endif /* HAVE_PATHS_H */
diff -r f67696211d6c -r df42425d8b06 bin/ksh/sigact.c
--- a/bin/ksh/sigact.c  Fri Jun 30 04:11:57 2017 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,455 +0,0 @@
-/*     $NetBSD: sigact.c,v 1.7 2017/06/23 00:07:15 kamil Exp $ */
-
-/* NAME:
- *      sigact.c - fake sigaction(2)
- *
- * SYNOPSIS:
- *      #include "sigact.h"
- * 
- *      int sigaction(int sig, struct sigaction *act, 
- *                      struct sigaction *oact);
- *      int sigaddset(sigset_t *mask, int sig);
- *      int sigdelset(sigset_t *mask, int sig);
- *      int sigemptyset(sigset_t *mask);
- *      int sigfillset(sigset_t *mask);
- *      int sigismember(sigset_t *mask, int sig);
- *      int sigpending(sigset_t *set);
- *      int sigprocmask(int how, sigset_t *set, sigset_t *oset);
- *      int sigsuspend(sigset_t *mask);
- *      
- *      RETSIGTYPE (*Signal(int sig, RETSIGTYPE (*disp)(int)))(int);
- *
- * DESCRIPTION:
- *      This is a fake sigaction implementation.  It uses 
- *      sigsetmask(2) et al or sigset(2) and friends if 
- *      available, otherwise it just uses signal(2).  If it 
- *      thinks sigaction(2) really exists it compiles to "almost" 
- *      nothing. 
- *      
- *      In any case it provides a Signal() function that is 
- *      implemented in terms of sigaction().
- *      If not using signal(2) as part of the underlying 
- *      implementation (USE_SIGNAL or USE_SIGMASK), and 
- *      NO_SIGNAL is not defined, it also provides a signal() 
- *      function that calls Signal(). 
- *
- *      The need for all this mucking about is the problems 
- *      caused by mixing various signal handling mechanisms in 
- *      the one process.  This module allows for a consistent 
- *      POSIX compliant interface to whatever is actually 
- *      available. 
- *      
- *      sigaction() allows the caller to examine and/or set the 
- *      action to be associated with a given signal. "act" and 
- *      "oact" are pointers to 'sigaction structs':
- *.nf
- * 
- *      struct sigaction 
- *      {
- *             RETSIGTYPE  (*sa_handler)();
- *             sigset_t  sa_mask;
- *             int       sa_flags;
- *      };
- *.fi
- * 
- *      RETSIGTYPE is normally 'void' in the POSIX implementation 
- *      and for most current systems.  On some older UNIX 
- *      systems, signal handlers do not return 'void', so  
- *      this implementation keeps 'sa_handler' inline with the 
- *      hosts normal signal handling conventions.
- *      'sa_mask' controls which signals will be blocked while 
- *      the selected signal handler is active.  It is not used 
- *      in this implementation.
- *      'sa_flags' controls various semantics such as whether 
- *      system calls should be automagically restarted 
- *      (SA_RESTART) etc.  It is not used in this 
- *      implementation. 
- *      Either "act" or "oact" may be NULL in which case the 
- *      appropriate operation is skipped.
- *      
- *      sigaddset() adds "sig" to the sigset_t pointed to by "mask".
- *      
- *      sigdelset() removes "sig" from the sigset_t pointed to 
- *      by "mask". 
- *      
- *      sigemptyset() makes the sigset_t pointed to by "mask" empty.
- *      
- *      sigfillset() makes the sigset_t pointed to by "mask" 
- *      full ie. match all signals.
- *      
- *      sigismember() returns true if "sig" is found in "*mask".
- *      
- *      sigpending() is supposed to return "set" loaded with the 
- *      set of signals that are blocked and pending for the 
- *      calling process.  It does nothing in this impementation.
- *      
- *      sigprocmask() is used to examine and/or change the 
- *      signal mask for the calling process.  Either "set" or 
- *      "oset" may be NULL in which case the appropriate 
- *      operation is skipped.  "how" may be one of SIG_BLOCK, 
- *      SIG_UNBLOCK or SIG_SETMASK.  If this package is built 
- *      with USE_SIGNAL, then this routine achieves nothing.
- *      
- *      sigsuspend() sets the signal mask to "*mask" and waits 
- *      for a signal to be delivered after which the previous 
- *      mask is restored.
- *      
- *      
- * RETURN VALUE:
- *      0==success, -1==failure
- *
- * BUGS:
- *      Since we fake most of this, don't expect fancy usage to 
- *      work.
- *
- * AUTHOR:
- *      Simon J. Gerraty <sjg%zen.void.oz.au@localhost>
- */     
-/* COPYRIGHT:
- *      @(#)Copyright (c) 1992 Simon J. Gerraty
- *
- *      This is free software.  It comes with NO WARRANTY.
- *      Permission to use, modify and distribute this source code
- *      is granted subject to the following conditions.
- *      1/ that that the above copyright notice and this notice 
- *      are preserved in all copies and that due credit be given 
- *      to the author.  
- *      2/ that any changes to this code are clearly commented 
- *      as such so that the author does get blamed for bugs 
- *      other than his own.
- *      
- *      Please send copies of changes and bug-fixes to:
- *      sjg%zen.void.oz.au@localhost
- *
- */
-/* Changes to sigact.c for pdksh, Michael Rendell <michael%cs.mun.ca@localhost>:
- *     - sigsuspend(): pass *mask to bsd4.2 sigpause instead of mask.
- *     - changed SIG_HDLR to RETSIGTYPE for use with GNU autoconf
- *     - added and used RETSIGVAL
- *     - include sh.h instead of signal.h (to get *_SIGNALS macros)
- *     - changed if !SA_NOCLDSTOP ... to USE_FAKE_SIGACT to avoid confusion
- *     - set the USE_* defines using the *_SIGNALS defines from autoconf
- *     - sigaction(): if using BSD signals, use sigvec() (used to use
- *       signal()) and set the SV_INTERRUPT flag (POSIX says syscalls
- *       are interrupted and pdksh needs this behaviour).
- *     - define IS_KSH before including anything; ifdef out routines
- *       not used in ksh if IS_KSH is defined (same in sigact.h).
- *     - use ARGS() instead of __P()
- *     - sigaction(),sigsuspend(),Signal(),signal(): use handler_t typedef
- *       instead of explicit type.
- */
-#include <sys/cdefs.h>
-
-#ifndef lint
-__RCSID("$NetBSD: sigact.c,v 1.7 2017/06/23 00:07:15 kamil Exp $");
-#endif
-
-
-/*
-    #include <signal.h>
-*/
-#define IS_KSH
-#include "sh.h"
-
-/*
-    #ifndef __P
-    # define   __P(p)  p
-    #endif
-*/
-
-
-/*
- * some systems have a faulty sigaction() implementation!
- * Allow us to bypass it.
- * Or they may have installed sigact.h as signal.h which is why 
- * we have SA_NOCLDSTOP defined.
- */
-#ifdef USE_FAKE_SIGACT /* let autoconf decide.. */
-/* #if !defined(SA_NOCLDSTOP) || defined(_SIGACT_H) || defined(USE_SIGNAL) || defined(USE_SIGSET) || defined(USE_SIGMASK) */
-
-#define USE_SIGMASK
-
-#include "sigact.h"
-
-/*
- * in case signal() has been mapped to our Signal().
- */
-#undef signal
-
- 
-int
-sigaction(sig, act, oact)
-  int sig;
-  struct sigaction *act, *oact;
-{
-  handler_t oldh;
-
-  if (act)
-  {
-#ifdef USE_SIGSET
-    oldh = sigset(sig, act->sa_handler);
-#else
-# ifdef USE_SIGMASK
-    struct sigvec nsv,osv;
-
-    nsv.sv_handler = act->sa_handler;
-    nsv.sv_mask = 0;                   /* punt */
-    nsv.sv_flags = SV_INTERRUPT;       /* punt */
-    sigvec(sig, &nsv, &osv);
-    oldh = osv.sv_handler;
-# else /* USE_SIGMASK */
-    oldh = signal(sig, act->sa_handler);
-# endif /* USE_SIGMASK */
-#endif
-  }
-  else
-  {
-    if (oact)
-    {      
-#ifdef USE_SIGSET
-      oldh = sigset(sig, SIG_IGN);
-#else
-      oldh = signal(sig, SIG_IGN);
-#endif
-      if (oldh != SIG_IGN && oldh !=  SIG_ERR)
-      {
-#ifdef USE_SIGSET
-       (void) sigset(sig, oldh);
-#else
-       (void) signal(sig, oldh);
-#endif
-      }
-    }
-  }
-  if (oact)
-  {
-    oact->sa_handler = oldh;
-  }
-  return 0;                            /* hey we're faking it */
-}
-



Home | Main Index | Thread Index | Old Index