#include #include #include static void handler1(int signum) { } static void handler2(int signum) { } int main() { struct sigaction sa; struct sigaction old_sa; int ret; sa.sa_handler = handler1; /* 1st */ sigemptyset(&sa.sa_mask); sa.sa_flags = 0; ret = sigaction(SIGHUP, &sa, &old_sa); if (ret == -1) { perror("sigaction"); return (1); } if (old_sa.sa_handler != SIG_DFL) { fprintf(stderr, "expected previous handler to be SIG_DFL\n"); return (1); } /* Just in case. */ memset(&old_sa, 0, sizeof(old_sa)); sa.sa_handler = handler2; /* 2nd */ sigemptyset(&sa.sa_mask); sa.sa_flags = 0; ret = sigaction(SIGHUP, &sa, &old_sa); if (ret == -1) { perror("sigaction"); return (1); } if (old_sa.sa_handler != handler1) { fprintf(stderr, "expected previous handler to be handler1\n"); if (old_sa.sa_handler == handler2) fprintf(stderr, "previous handler is reported to be handler2\n"); else fprintf(stderr, "previous handler is reported to be %p\n", old_sa.sa_handler); return (1); } printf("OK\n"); return (0); }