Files

39 lines
1.5 KiB
C
Executable File

#ifndef __INC_LIBTHECORE_SIGNAL_H__
#define __INC_LIBTHECORE_SIGNAL_H__
/* ### LINUX-BLOCK-BEGIN (signal.h shadow guard) ######################### */
#if defined(__linux__) && !defined(_SIGNAL_H)
/* ---------------------------------------------------------------------------
* Header-shadowing guard (Linux only).
*
* glibc's <sys/signal.h> is literally one line: "#include <signal.h>". Every
* module compiles with -I<...>/libthecore/include, so that bracket include
* resolves to *this* file instead of /usr/include/signal.h, and SIGPIPE,
* signal(), sigaction() and friends silently disappear. libthecore's own
* stdafx.h includes <sys/signal.h>, so this bites signal.c immediately, and
* db/src/Main.cpp and libsql/Tellwait.cpp include <signal.h> directly. (It
* does not happen on FreeBSD, where <signal.h> includes <sys/signal.h> and not
* the other way round, which is why the production build never hit this.)
*
* Pull the real header in via #include_next, which resumes the search after
* the directory this file was found in. _SIGNAL_H is glibc's own guard, so
* when the system header already got in first this is a no-op.
* ------------------------------------------------------------------------- */
#include_next <signal.h>
#endif
/* ### LINUX-BLOCK-END (signal.h shadow guard) ########################### */
#ifdef __cplusplus
extern "C"
{
#endif
extern void signal_setup();
extern void signal_timer_disable();
extern void signal_timer_enable(int timeout_seconds);
#ifdef __cplusplus
};
#endif
#endif