xref: /minix3/external/bsd/bind/dist/unit/atf-src/m4/module-signals.m4 (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
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