From 34673241173ebcb143df9652e67ac077ba7176c0 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Mon, 9 Mar 2015 17:18:15 +0000 Subject: - reset all signals to default in child_spawn* - cosmetic fix in INSTALL - version: rc for 2.3.1.2 --- src/libstddjb/child_spawn.c | 5 ++++- src/libstddjb/child_spawn0.c | 29 +++++++++++++++++++++++++---- src/libstddjb/child_spawn1_internal.c | 5 ++++- 3 files changed, 33 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/libstddjb/child_spawn.c b/src/libstddjb/child_spawn.c index a9003e5..a9938c7 100644 --- a/src/libstddjb/child_spawn.c +++ b/src/libstddjb/child_spawn.c @@ -74,8 +74,11 @@ pid_t child_spawn (char const *prog, char const *const *argv, char const *const sigset_t set ; sigemptyset(&set) ; e = posix_spawnattr_setsigmask(&attr, &set) ; + if (e) goto errattr ; + sigfillset(&set) ; + e = posix_spawnattr_setsigdefault(&attr, &set) ; + if (e) goto errattr ; } - if (e) goto errattr ; e = posix_spawn_file_actions_init(&actions) ; if (e) goto errattr ; if (n >= 2) diff --git a/src/libstddjb/child_spawn0.c b/src/libstddjb/child_spawn0.c index b96b2ef..7129515 100644 --- a/src/libstddjb/child_spawn0.c +++ b/src/libstddjb/child_spawn0.c @@ -6,6 +6,7 @@ #ifdef SKALIBS_HASPOSIXSPAWN +#include #include #include #include @@ -13,13 +14,33 @@ pid_t child_spawn0 (char const *prog, char const *const *argv, char const *const *envp) { - pid_t pid ; + posix_spawnattr_t attr ; int e ; + pid_t pid ; int haspath = !!env_get("PATH") ; - if (!haspath && (setenv("PATH", SKALIBS_DEFAULTPATH, 0) < 0)) return 0 ; - e = posix_spawnp(&pid, prog, 0, 0, (char *const *)argv, (char *const *)envp) ; + e = posix_spawnattr_init(&attr) ; + if (e) goto err ; + { + sigset_t set ; + sigemptyset(&set) ; + e = posix_spawnattr_setsigmask(&attr, &set) ; + if (e) goto errattr ; + sigfillset(&set) ; + e = posix_spawnattr_setsigdefault(&attr, &set) ; + if (e) goto errattr ; + } + if (!haspath && (setenv("PATH", SKALIBS_DEFAULTPATH, 0) < 0)) { e = errno ; goto errattr ; } + e = posix_spawnp(&pid, prog, 0, &attr, (char *const *)argv, (char *const *)envp) ; if (!haspath) unsetenv("PATH") ; - return e ? (errno = e, 0) : pid ; + posix_spawnattr_destroy(&attr) ; + if (e) goto err ; + return pid ; + + errattr: + posix_spawnattr_destroy(&attr) ; + err: + errno = e ; + return 0 ; } #else diff --git a/src/libstddjb/child_spawn1_internal.c b/src/libstddjb/child_spawn1_internal.c index 2ce2ac3..8347f69 100644 --- a/src/libstddjb/child_spawn1_internal.c +++ b/src/libstddjb/child_spawn1_internal.c @@ -28,8 +28,11 @@ pid_t child_spawn1_internal (char const *prog, char const *const *argv, char con sigset_t set ; sigemptyset(&set) ; e = posix_spawnattr_setsigmask(&attr, &set) ; + if (e) goto errattr ; + sigfillset(&set) ; + e = posix_spawnattr_setsigdefault(&attr, &set) ; + if (e) goto errattr ; } - if (e) goto errattr ; e = posix_spawn_file_actions_init(&actions) ; if (e) goto errattr ; e = posix_spawn_file_actions_adddup2(&actions, p[to & 1], to & 1) ; -- cgit v1.3.1