1*d780102eSjmmv // 2*d780102eSjmmv // Automated Testing Framework (atf) 3*d780102eSjmmv // 4*d780102eSjmmv // Copyright (c) 2007 The NetBSD Foundation, Inc. 5*d780102eSjmmv // All rights reserved. 6*d780102eSjmmv // 7*d780102eSjmmv // Redistribution and use in source and binary forms, with or without 8*d780102eSjmmv // modification, are permitted provided that the following conditions 9*d780102eSjmmv // are met: 10*d780102eSjmmv // 1. Redistributions of source code must retain the above copyright 11*d780102eSjmmv // notice, this list of conditions and the following disclaimer. 12*d780102eSjmmv // 2. Redistributions in binary form must reproduce the above copyright 13*d780102eSjmmv // notice, this list of conditions and the following disclaimer in the 14*d780102eSjmmv // documentation and/or other materials provided with the distribution. 15*d780102eSjmmv // 16*d780102eSjmmv // THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 17*d780102eSjmmv // CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 18*d780102eSjmmv // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19*d780102eSjmmv // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20*d780102eSjmmv // IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 21*d780102eSjmmv // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22*d780102eSjmmv // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 23*d780102eSjmmv // GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24*d780102eSjmmv // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 25*d780102eSjmmv // IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 26*d780102eSjmmv // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27*d780102eSjmmv // IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*d780102eSjmmv // 29*d780102eSjmmv 30*d780102eSjmmv #if !defined(TOOLS_SIGNALS_HPP) 31*d780102eSjmmv #define TOOLS_SIGNALS_HPP 32*d780102eSjmmv 33*d780102eSjmmv extern "C" { 34*d780102eSjmmv #include <signal.h> 35*d780102eSjmmv } 36*d780102eSjmmv 37*d780102eSjmmv namespace tools { 38*d780102eSjmmv namespace signals { 39*d780102eSjmmv 40*d780102eSjmmv extern const int last_signo; 41*d780102eSjmmv typedef void (*handler)(const int); 42*d780102eSjmmv 43*d780102eSjmmv class signal_programmer; 44*d780102eSjmmv 45*d780102eSjmmv // ------------------------------------------------------------------------ 46*d780102eSjmmv // The "signal_holder" class. 47*d780102eSjmmv // ------------------------------------------------------------------------ 48*d780102eSjmmv 49*d780102eSjmmv // 50*d780102eSjmmv // A RAII model to hold a signal while the object is alive. 51*d780102eSjmmv // 52*d780102eSjmmv class signal_holder { 53*d780102eSjmmv const int m_signo; 54*d780102eSjmmv signal_programmer* m_sp; 55*d780102eSjmmv 56*d780102eSjmmv public: 57*d780102eSjmmv signal_holder(const int); 58*d780102eSjmmv ~signal_holder(void); 59*d780102eSjmmv 60*d780102eSjmmv void process(void); 61*d780102eSjmmv }; 62*d780102eSjmmv 63*d780102eSjmmv // ------------------------------------------------------------------------ 64*d780102eSjmmv // The "signal_programmer" class. 65*d780102eSjmmv // ------------------------------------------------------------------------ 66*d780102eSjmmv 67*d780102eSjmmv // 68*d780102eSjmmv // A RAII model to program a signal while the object is alive. 69*d780102eSjmmv // 70*d780102eSjmmv class signal_programmer { 71*d780102eSjmmv const int m_signo; 72*d780102eSjmmv const handler m_handler; 73*d780102eSjmmv bool m_programmed; 74*d780102eSjmmv struct sigaction m_oldsa; 75*d780102eSjmmv 76*d780102eSjmmv public: 77*d780102eSjmmv signal_programmer(const int, const handler); 78*d780102eSjmmv ~signal_programmer(void); 79*d780102eSjmmv 80*d780102eSjmmv void unprogram(void); 81*d780102eSjmmv }; 82*d780102eSjmmv 83*d780102eSjmmv // ------------------------------------------------------------------------ 84*d780102eSjmmv // Free functions. 85*d780102eSjmmv // ------------------------------------------------------------------------ 86*d780102eSjmmv 87*d780102eSjmmv void reset(const int); 88*d780102eSjmmv 89*d780102eSjmmv } // namespace signals 90*d780102eSjmmv } // namespace tools 91*d780102eSjmmv 92*d780102eSjmmv #endif // !defined(TOOLS_SIGNALS_HPP) 93