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>
32 gr_local_sighandler::gr_local_sighandler (int signum,
33 void (*new_handler)(int))
37 struct sigaction new_action;
38 memset (&new_action, 0, sizeof (new_action));
40 new_action.sa_handler = new_handler;
41 sigemptyset (&new_action.sa_mask);
42 new_action.sa_flags = 0;
44 if (sigaction (d_signum, &new_action, &d_old_action) < 0){
45 perror ("sigaction (install new)");
46 throw std::runtime_error ("sigaction");
51 gr_local_sighandler::~gr_local_sighandler ()
54 if (sigaction (d_signum, &d_old_action, 0) < 0){
55 perror ("sigaction (restore old)");
56 throw std::runtime_error ("sigaction");
62 gr_local_sighandler::throw_signal (int signum)
64 throw gr_signal (signum);
68 * Semi-hideous way to may a signal number into a signal name
71 #define SIGNAME(x) case x: return #x
74 gr_signal::name () const
173 #if defined (HAVE_SNPRINTF)
174 #if defined (SIGRTMIN) && defined (SIGRTMAX)
175 if (signal () >= SIGRTMIN && signal () <= SIGRTMAX){
176 snprintf (tmp, sizeof (tmp), "SIGRTMIN + %d", signal ());
180 snprintf (tmp, sizeof (tmp), "SIGNAL %d", signal ());
183 return "Unknown signal";