1*00b67f09SDavid van Moolenbroekdnl 2*00b67f09SDavid van Moolenbroekdnl Automated Testing Framework (atf) 3*00b67f09SDavid van Moolenbroekdnl 4*00b67f09SDavid van Moolenbroekdnl Copyright (c) 2008 The NetBSD Foundation, Inc. 5*00b67f09SDavid van Moolenbroekdnl All rights reserved. 6*00b67f09SDavid van Moolenbroekdnl 7*00b67f09SDavid van Moolenbroekdnl Redistribution and use in source and binary forms, with or without 8*00b67f09SDavid van Moolenbroekdnl modification, are permitted provided that the following conditions 9*00b67f09SDavid van Moolenbroekdnl are met: 10*00b67f09SDavid van Moolenbroekdnl 1. Redistributions of source code must retain the above copyright 11*00b67f09SDavid van Moolenbroekdnl notice, this list of conditions and the following disclaimer. 12*00b67f09SDavid van Moolenbroekdnl 2. Redistributions in binary form must reproduce the above copyright 13*00b67f09SDavid van Moolenbroekdnl notice, this list of conditions and the following disclaimer in the 14*00b67f09SDavid van Moolenbroekdnl documentation and/or other materials provided with the distribution. 15*00b67f09SDavid van Moolenbroekdnl 16*00b67f09SDavid van Moolenbroekdnl THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 17*00b67f09SDavid van Moolenbroekdnl CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18*00b67f09SDavid van Moolenbroekdnl INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19*00b67f09SDavid van Moolenbroekdnl MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20*00b67f09SDavid van Moolenbroekdnl IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 21*00b67f09SDavid van Moolenbroekdnl DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22*00b67f09SDavid van Moolenbroekdnl DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 23*00b67f09SDavid van Moolenbroekdnl GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24*00b67f09SDavid van Moolenbroekdnl INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25*00b67f09SDavid van Moolenbroekdnl IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26*00b67f09SDavid van Moolenbroekdnl OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27*00b67f09SDavid van Moolenbroekdnl IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*00b67f09SDavid van Moolenbroekdnl 29*00b67f09SDavid van Moolenbroek 30*00b67f09SDavid van MoolenbroekAC_DEFUN([ATF_MODULE_SIGNALS], [ 31*00b67f09SDavid van Moolenbroek AC_CACHE_CHECK( 32*00b67f09SDavid van Moolenbroek [for the last valid signal], 33*00b67f09SDavid van Moolenbroek [kyua_cv_signal_lastno], [ 34*00b67f09SDavid van Moolenbroek AC_RUN_IFELSE([AC_LANG_PROGRAM([#include <err.h> 35*00b67f09SDavid van Moolenbroek#include <errno.h> 36*00b67f09SDavid van Moolenbroek#include <signal.h> 37*00b67f09SDavid van Moolenbroek#include <stdio.h> 38*00b67f09SDavid van Moolenbroek#include <stdio.h> 39*00b67f09SDavid van Moolenbroek#include <stdlib.h>], [ 40*00b67f09SDavid van Moolenbroek int i; 41*00b67f09SDavid van Moolenbroek FILE *f; 42*00b67f09SDavid van Moolenbroek 43*00b67f09SDavid van Moolenbroek i = 0; 44*00b67f09SDavid van Moolenbroek while (i < 1024) { 45*00b67f09SDavid van Moolenbroek i++; 46*00b67f09SDavid van Moolenbroek if (i != SIGKILL && i != SIGSTOP) { 47*00b67f09SDavid van Moolenbroek struct sigaction sa; 48*00b67f09SDavid van Moolenbroek int ret; 49*00b67f09SDavid van Moolenbroek 50*00b67f09SDavid van Moolenbroek sa.sa_handler = SIG_IGN; 51*00b67f09SDavid van Moolenbroek sigemptyset(&sa.sa_mask); 52*00b67f09SDavid van Moolenbroek sa.sa_flags = 0; 53*00b67f09SDavid van Moolenbroek 54*00b67f09SDavid van Moolenbroek ret = sigaction(i, &sa, NULL); 55*00b67f09SDavid van Moolenbroek if (ret == -1) { 56*00b67f09SDavid van Moolenbroek if (errno == EINVAL) { 57*00b67f09SDavid van Moolenbroek i--; 58*00b67f09SDavid van Moolenbroek break; 59*00b67f09SDavid van Moolenbroek } else 60*00b67f09SDavid van Moolenbroek err(EXIT_FAILURE, "sigaction failed"); 61*00b67f09SDavid van Moolenbroek } 62*00b67f09SDavid van Moolenbroek } 63*00b67f09SDavid van Moolenbroek } 64*00b67f09SDavid van Moolenbroek if (i == 100) 65*00b67f09SDavid van Moolenbroek errx(EXIT_FAILURE, "too much signals"); 66*00b67f09SDavid van Moolenbroek 67*00b67f09SDavid van Moolenbroek f = fopen("conftest.cnt", "w"); 68*00b67f09SDavid van Moolenbroek if (f == NULL) 69*00b67f09SDavid van Moolenbroek err(EXIT_FAILURE, "failed to open file"); 70*00b67f09SDavid van Moolenbroek 71*00b67f09SDavid van Moolenbroek fprintf(f, "%d\n", i); 72*00b67f09SDavid van Moolenbroek fclose(f); 73*00b67f09SDavid van Moolenbroek 74*00b67f09SDavid van Moolenbroek return EXIT_SUCCESS; 75*00b67f09SDavid van Moolenbroek])], 76*00b67f09SDavid van Moolenbroek [if test ! -f conftest.cnt; then 77*00b67f09SDavid van Moolenbroek kyua_cv_signal_lastno=15 78*00b67f09SDavid van Moolenbroek else 79*00b67f09SDavid van Moolenbroek kyua_cv_signal_lastno=$(cat conftest.cnt) 80*00b67f09SDavid van Moolenbroek rm -f conftest.cnt 81*00b67f09SDavid van Moolenbroek fi], 82*00b67f09SDavid van Moolenbroek [kyua_cv_signal_lastno=15]) 83*00b67f09SDavid van Moolenbroek ]) 84*00b67f09SDavid van Moolenbroek AC_DEFINE_UNQUOTED([LAST_SIGNO], [${kyua_cv_signal_lastno}], 85*00b67f09SDavid van Moolenbroek [Define to the last valid signal number]) 86*00b67f09SDavid van Moolenbroek]) 87