sigaction provides a more portable way of installing signals
---
surf.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/surf.c b/surf.c
index 2b54e3c..65a5e66 100644
--- a/surf.c
+++ b/surf.c
@@ -316,9 +316,20 @@ setup(void)
GdkDisplay *gdpy;
int i, j;
+ struct sigaction sachld;
+ struct sigaction sahup;
+
+ memset(&sachld, 0, sizeof(struct sigaction));
+ memset(&sahup, 0, sizeof(struct sigaction));
+
+ sachld.sa_handler = sigchld;
+ sahup.sa_handler = sighup;
+
/* clean up any zombies immediately */
- sigchld(0);
- if (signal(SIGHUP, sighup) == SIG_ERR)
+ if (sigaction(SIGCHLD, &sachld, NULL) == -1)
+ die("Can't install SIGCHLD handler");
+
+ if (sigaction(SIGHUP, &sahup, NULL) == -1)
die("Can't install SIGHUP handler");
if (!(dpy = XOpenDisplay(NULL)))
@@ -402,8 +413,6 @@ setup(void)
void
sigchld(int unused)
{
- if (signal(SIGCHLD, sigchld) == SIG_ERR)
- die("Can't install SIGCHLD handler");
while (waitpid(-1, NULL, WNOHANG) > 0)
;
}
--
2.29.0