herbe

[fork] notifications
Log | Files | Refs | README | LICENSE

commit 466651958de2a6e60325eea8d12d109328e07a88
parent 615c28d7370dff1abe3b63a8e1477bf462bcd83b
Author: Samuel Dudik <samuel.dudik@gmail.com>
Date:   Tue, 18 Aug 2020 18:46:02 +0200

Replace signal with sigaction

Diffstat:
Mherbe.c | 37+++++++++++++++++++++----------------
1 file changed, 21 insertions(+), 16 deletions(-)

diff --git a/herbe.c b/herbe.c @@ -68,21 +68,15 @@ int get_max_len(char *body, XftFont *font, int max_text_width) return ++eol; } -void expire() +void expire(int sig) { XEvent event; event.type = ButtonPress; - event.xbutton.button = DISMISS_BUTTON; + event.xbutton.button = (sig == SIGUSR2) ? (ACTION_BUTTON) : (DISMISS_BUTTON); XSendEvent(display, window, 0, 0, &event); XFlush(display); } -void action() -{ - exit_code = EXIT_ACTION; - expire(); -} - int main(int argc, char *argv[]) { if (argc == 1) @@ -91,11 +85,21 @@ int main(int argc, char *argv[]) die("Usage: %s body", argv[0]); } - signal(SIGALRM, expire); - signal(SIGTERM, expire); - signal(SIGINT, expire); - signal(SIGUSR1, SIG_IGN); - signal(SIGUSR2, SIG_IGN); + struct sigaction act_expire, act_ignore; + act_expire.sa_handler = expire; + act_expire.sa_flags = SA_RESTART; + sigemptyset(&act_expire.sa_mask); + + act_ignore.sa_handler = SIG_IGN; + act_ignore.sa_flags = 0; + sigemptyset(&act_ignore.sa_mask); + + sigaction(SIGALRM, &act_expire, 0); + sigaction(SIGTERM, &act_expire, 0); + sigaction(SIGINT, &act_expire, 0); + + sigaction(SIGUSR1, &act_ignore, 0); + sigaction(SIGUSR2, &act_ignore, 0); display = XOpenDisplay(0); @@ -171,8 +175,8 @@ int main(int argc, char *argv[]) sem_t *mutex = sem_open("/herbe", O_CREAT, 0644, 1); sem_wait(mutex); - signal(SIGUSR1, expire); - signal(SIGUSR2, action); + sigaction(SIGUSR1, &act_expire, 0); + sigaction(SIGUSR2, &act_expire, 0); if (duration != 0) alarm(duration); @@ -213,4 +217,4 @@ int main(int argc, char *argv[]) XCloseDisplay(display); exit(exit_code); -} +} +\ No newline at end of file