Diff for /embedaddon/libiconv/srclib/sigprocmask.c between versions 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2012/05/29 09:29:43 version 1.1.1.3, 2021/03/17 13:38:46
Line 1 Line 1
 /* POSIX compatible signal blocking.  /* POSIX compatible signal blocking.
   Copyright (C) 2006-2011 Free Software Foundation, Inc.   Copyright (C) 2006-2019 Free Software Foundation, Inc.
    Written by Bruno Haible <bruno@clisp.org>, 2006.     Written by Bruno Haible <bruno@clisp.org>, 2006.
   
    This program is free software: you can redistribute it and/or modify     This program is free software: you can redistribute it and/or modify
Line 13 Line 13
    GNU General Public License for more details.     GNU General Public License for more details.
   
    You should have received a copy of the GNU General Public License     You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
   
 #include <config.h>  #include <config.h>
   
Line 24 Line 24
 #include <stdint.h>  #include <stdint.h>
 #include <stdlib.h>  #include <stdlib.h>
   
   #if HAVE_MSVC_INVALID_PARAMETER_HANDLER
   # include "msvc-inval.h"
   #endif
   
 /* We assume that a platform without POSIX signal blocking functions  /* We assume that a platform without POSIX signal blocking functions
    also does not have the POSIX sigaction() function, only the     also does not have the POSIX sigaction() function, only the
    signal() function.  We also assume signal() has SysV semantics,     signal() function.  We also assume signal() has SysV semantics,
    where any handler is uninstalled prior to being invoked.  This is     where any handler is uninstalled prior to being invoked.  This is
   true for Woe32 platforms.  */   true for native Windows platforms.  */
   
 /* We use raw signal(), but also provide a wrapper rpl_signal() so  /* We use raw signal(), but also provide a wrapper rpl_signal() so
    that applications can query or change a blocked signal.  */     that applications can query or change a blocked signal.  */
Line 46 Line 50
 /* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias  /* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias
    for the signal SIGABRT.  Only one signal handler is stored for both     for the signal SIGABRT.  Only one signal handler is stored for both
    SIGABRT and SIGABRT_COMPAT.  SIGABRT_COMPAT is not a signal of its own.  */     SIGABRT and SIGABRT_COMPAT.  SIGABRT_COMPAT is not a signal of its own.  */
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__#if defined _WIN32 && ! defined __CYGWIN__
 # undef SIGABRT_COMPAT  # undef SIGABRT_COMPAT
 # define SIGABRT_COMPAT 6  # define SIGABRT_COMPAT 6
 #endif  #endif
Line 58 Line 62
   
 typedef void (*handler_t) (int);  typedef void (*handler_t) (int);
   
   #if HAVE_MSVC_INVALID_PARAMETER_HANDLER
   static handler_t
   signal_nothrow (int sig, handler_t handler)
   {
     handler_t result;
   
     TRY_MSVC_INVAL
       {
         result = signal (sig, handler);
       }
     CATCH_MSVC_INVAL
       {
         result = SIG_ERR;
         errno = EINVAL;
       }
     DONE_MSVC_INVAL;
   
     return result;
   }
   # define signal signal_nothrow
   #endif
   
 /* Handling of gnulib defined signals.  */  /* Handling of gnulib defined signals.  */
   
 #if GNULIB_defined_SIGPIPE  #if GNULIB_defined_SIGPIPE
Line 80  ext_signal (int sig, handler_t handler) Line 106  ext_signal (int sig, handler_t handler)
       return signal (sig, handler);        return signal (sig, handler);
     }      }
 }  }
   # undef signal
 # define signal ext_signal  # define signal ext_signal
 #endif  #endif
   
Line 303  rpl_signal (int sig, handler_t handler) Line 330  rpl_signal (int sig, handler_t handler)
 }  }
   
 #if GNULIB_defined_SIGPIPE  #if GNULIB_defined_SIGPIPE
/* Raise the signal SIG.  *//* Raise the signal SIGPIPE.  */
 int  int
rpl_raise (int sig)_gl_raise_SIGPIPE (void)
# undef raise 
 {  {
  switch (sig)  if (blocked_set & (1U << SIGPIPE))
     pending_array[SIGPIPE] = 1;
   else
     {      {
    case SIGPIPE:      handler_t handler = SIGPIPE_handler;
      if (blocked_set & (1U << sig))      if (handler == SIG_DFL)
        pending_array[sig] = 1;        exit (128 + SIGPIPE);
      else      else if (handler != SIG_IGN)
        {        (*handler) (SIGPIPE);
          handler_t handler = SIGPIPE_handler; 
          if (handler == SIG_DFL) 
            exit (128 + SIGPIPE); 
          else if (handler != SIG_IGN) 
            (*handler) (sig); 
        } 
      return 0; 
    default: /* System defined signal */ 
      return raise (sig); 
     }      }
     return 0;
 }  }
 #endif  #endif

Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>