3 * Copyright 2004 Free Software Foundation, Inc.
5 * This file is part of GNU Radio
7 * GNU Radio is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3, or (at your option)
12 * GNU Radio is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with GNU Radio; see the file COPYING. If not, write to
19 * the Free Software Foundation, Inc., 51 Franklin Street,
20 * Boston, MA 02110-1301, USA.
27 #include <gr_local_sighandler.h>
33 gr_local_sighandler::gr_local_sighandler (int signum,
34 void (*new_handler)(int))
38 struct sigaction new_action;
39 memset (&new_action, 0, sizeof (new_action));
41 new_action.sa_handler = new_handler;
42 sigemptyset (&new_action.sa_mask);
43 new_action.sa_flags = 0;
45 if (sigaction (d_signum, &new_action, &d_old_action) < 0){
46 perror ("sigaction (install new)");
47 throw std::runtime_error ("sigaction");
52 gr_local_sighandler::~gr_local_sighandler ()
55 if (sigaction (d_signum, &d_old_action, 0) < 0){
56 perror ("sigaction (restore old)");
57 throw std::runtime_error ("sigaction");
63 gr_local_sighandler::throw_signal (int signum)
65 throw gr_signal (signum);
69 * Semi-hideous way to may a signal number into a signal name
72 #define SIGNAME(x) case x: return #x
75 gr_signal::name () const
174 #if defined (HAVE_SNPRINTF)
175 #if defined (SIGRTMIN) && defined (SIGRTMAX)
176 if (signal () >= SIGRTMIN && signal () <= SIGRTMAX){
177 snprintf (tmp, sizeof (tmp), "SIGRTMIN + %d", signal ());
181 snprintf (tmp, sizeof (tmp), "SIGNAL %d", signal ());
184 return "Unknown signal";