(root)/
strace-6.5/
tests-mx32/
rt_sigaction.c
       1  /*
       2   * Copyright (c) 2014-2015 Dmitry V. Levin <ldv@strace.io>
       3   * Copyright (c) 2015-2021 The strace developers.
       4   * All rights reserved.
       5   *
       6   * SPDX-License-Identifier: GPL-2.0-or-later
       7   */
       8  
       9  #include <assert.h>
      10  #include <stdlib.h>
      11  #include <unistd.h>
      12  #include <signal.h>
      13  
      14  static void handle_signal(int no)
      15  {
      16  	_exit(128 + no);
      17  }
      18  
      19  int
      20  main(void)
      21  {
      22  	struct sigaction sa, sa0;
      23  
      24  	sa.sa_handler = SIG_IGN;
      25  	sigemptyset(&sa.sa_mask);
      26  	sigaddset(&sa.sa_mask, SIGHUP);
      27  	sigaddset(&sa.sa_mask, SIGINT);
      28  	sa.sa_flags = SA_RESTART;
      29  	assert(!sigaction(SIGUSR2, &sa, &sa0));
      30  
      31  	sa.sa_handler = handle_signal;
      32  	sigemptyset(&sa.sa_mask);
      33  	sigaddset(&sa.sa_mask, SIGQUIT);
      34  	sigaddset(&sa.sa_mask, SIGTERM);
      35  	sa.sa_flags = SA_SIGINFO;
      36  	assert(!sigaction(SIGUSR2, &sa, &sa0));
      37  
      38  	sa.sa_handler = SIG_DFL;
      39  	sigemptyset(&sa.sa_mask);
      40  	sa.sa_flags = 0;
      41  	assert(!sigaction(SIGUSR2, &sa, &sa0));
      42  
      43  	sigfillset(&sa.sa_mask);
      44  	sigdelset(&sa.sa_mask, SIGHUP);
      45  	assert(!sigaction(SIGUSR2, &sa, &sa0));
      46  
      47  	return 0;
      48  }