(root)/
strace-6.5/
tests/
qual_signal.c
       1  /*
       2   * Check how strace -e signal=set works.
       3   *
       4   * Copyright (c) 2016-2021 Dmitry V. Levin <ldv@strace.io>
       5   * All rights reserved.
       6   *
       7   * SPDX-License-Identifier: GPL-2.0-or-later
       8   */
       9  
      10  #include "tests.h"
      11  #include <assert.h>
      12  #include <signal.h>
      13  #include <stdio.h>
      14  #include <stdlib.h>
      15  #include <unistd.h>
      16  
      17  static pid_t pid;
      18  static uid_t uid;
      19  
      20  static void
      21  handler(int sig)
      22  {
      23  }
      24  
      25  static void
      26  test_sig(int signo, const char *name)
      27  {
      28  	const struct sigaction act = { .sa_handler = handler };
      29  
      30  	if (sigaction(signo, &act, NULL))
      31  		perror_msg_and_fail("sigaction: %d", signo);
      32  
      33  	sigset_t mask;
      34  	sigemptyset(&mask);
      35  	sigaddset(&mask, signo);
      36  	if (sigprocmask(SIG_UNBLOCK, &mask, NULL))
      37  		perror_msg_and_fail("sigprocmask: %d", signo);
      38  
      39  	if (kill(pid, signo))
      40  		perror_msg_and_fail("kill(%d, %d)", pid, signo);
      41  
      42  	if (name && *name)
      43  		printf("--- %s {si_signo=%s, si_code=SI_USER"
      44  		       ", si_pid=%d, si_uid=%d} ---\n",
      45  		       name, name, pid, uid);
      46  }
      47  
      48  int
      49  main(int ac, const char **av)
      50  {
      51  	assert(ac & 1);
      52  
      53  	pid = getpid();
      54  	uid = geteuid();
      55  
      56  	for (int i = 1; i < ac; i += 2)
      57  		test_sig(atoi(av[i]), av[i + 1]);
      58  
      59  	puts("+++ exited with 0 +++");
      60  	return 0;
      61  }