changeset 5227:7406014c9120 draft

dhcpcd: allow sigpipe in scripts.
author Roy Marples <roy@marples.name>
date Fri, 15 May 2020 15:56:47 +0100
parents 06575a46bbdd
children 82c7e8204e9b
files src/dhcpcd.c src/dhcpcd.h src/script.c
diffstat 3 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/dhcpcd.c	Fri May 15 15:34:16 2020 +0100
+++ b/src/dhcpcd.c	Fri May 15 15:56:47 2020 +0100
@@ -85,6 +85,11 @@
 	SIGUSR2,
 };
 const size_t dhcpcd_signals_len = __arraycount(dhcpcd_signals);
+
+const int dhcpcd_signals_ignore[] = {
+	SIGPIPE,
+};
+const size_t dhcpcd_signals_ignore_len = __arraycount(dhcpcd_signals_ignore);
 #endif
 
 #define IF_UPANDRUNNING(a) \
@@ -1784,6 +1789,7 @@
 #ifdef USE_SIGNALS
 	int sig = 0;
 	const char *siga = NULL;
+	size_t si;
 #endif
 
 	/* Test for --help and --version */
@@ -2040,8 +2046,8 @@
 	}
 
 #ifdef USE_SIGNALS
-	/* Ignore SIGPIPE, prefer EPIPE. */
-	signal(SIGPIPE, SIG_IGN);
+	for (si = 0; si < dhcpcd_signals_ignore_len; si++)
+		signal(dhcpcd_signals_ignore[i], SIG_IGN);
 
 	/* Save signal mask, block and redirect signals to our handler */
 	if (eloop_signal_set_cb(ctx.eloop,
--- a/src/dhcpcd.h	Fri May 15 15:34:16 2020 +0100
+++ b/src/dhcpcd.h	Fri May 15 15:56:47 2020 +0100
@@ -248,6 +248,8 @@
 #ifdef USE_SIGNALS
 extern const int dhcpcd_signals[];
 extern const size_t dhcpcd_signals_len;
+extern const int dhcpcd_signals_ignore[];
+extern const size_t dhcpcd_signals_ignore_len;
 #endif
 
 int dhcpcd_ifafwaiting(const struct interface *);
--- a/src/script.c	Fri May 15 15:34:16 2020 +0100
+++ b/src/script.c	Fri May 15 15:56:47 2020 +0100
@@ -108,6 +108,8 @@
 	posix_spawnattr_setsigmask(&attr, &defsigs);
 	for (i = 0; i < dhcpcd_signals_len; i++)
 		sigaddset(&defsigs, dhcpcd_signals[i]);
+	for (i = 0; i < dhcpcd_signals_ignore_len; i++)
+		sigaddset(&defsigs, dhcpcd_signals_ignore[i]);
 	posix_spawnattr_setsigdefault(&attr, &defsigs);
 #endif
 	errno = 0;