#include <err.h>
#include <fcntl.h>
+#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
#include <time.h>
static int statefd = -1;
+static sigset_t signals_to_block;
+
static void
dummy_out(bool state)
{
pulse()
{
struct timespec const ts = { 0, pulsewidth };
+ sigset_t saved_mask;
+ if (sigprocmask(SIG_BLOCK, &signals_to_block, &saved_mask) != 0)
+ err(1, "sigprocmask(block)");
dummy_out(true);
record_tick();
clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, NULL);
dummy_out(false);
+ if (sigprocmask(SIG_SETMASK, &saved_mask, NULL) != 0)
+ err(1, "sigprocmask(restore)");
}
static void
int opt;
tzset();
+ sigemptyset(&signals_to_block);
+ sigaddset(&signals_to_block, SIGINT);
+ sigaddset(&signals_to_block, SIGTERM);
if (clock_gettime(CLOCK_REALTIME, &ts) != 0)
err (1, "clock_gettime");
if (localtime_r(&ts.tv_sec, &displayed) == NULL)