From: Roy Marples Date: Tue, 21 Mar 2017 20:56:59 +0000 (+0000) Subject: Remove posix_spawn(3) compat code. X-Git-Tag: v7.0.0-beta1~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a62d8cd3c459c4cc3f93d94298ba3f4523bc5afb;p=thirdparty%2Fdhcpcd.git Remove posix_spawn(3) compat code. All supported OS's have this in libc now. --- diff --git a/compat/posix_spawn.c b/compat/posix_spawn.c deleted file mode 100644 index 50183692..00000000 --- a/compat/posix_spawn.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * dhcpcd - DHCP client daemon - * Copyright (c) 2006-2012 Roy Marples - * All rights reserved - - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* This implementation of posix_spawn is only suitable for the needs of dhcpcd - * but it could easily be extended to other applications. */ - -#include -#include - -#include -#include -#include -#include -#include - -#include "common.h" -#include "posix_spawn.h" - -#ifndef _NSIG -#ifdef _SIG_MAXSIG -#define _NSIG _SIG_MAXSIG + 1 -#else -/* Guess */ -#define _NSIG SIGPWR + 1 -#endif -#endif - -extern char **environ; - -static int -posix_spawnattr_handle(const posix_spawnattr_t *attrp) -{ - struct sigaction sa; - int i; - - if (attrp->posix_attr_flags & POSIX_SPAWN_SETSIGMASK) - sigprocmask(SIG_SETMASK, &attrp->posix_attr_sigmask, NULL); - - if (attrp->posix_attr_flags & POSIX_SPAWN_SETSIGDEF) { - memset(&sa, 0, sizeof(sa)); - sa.sa_handler = SIG_DFL; - for (i = 1; i < _NSIG; i++) { - if (sigismember(&attrp->posix_attr_sigdefault, i)) { - if (sigaction(i, &sa, NULL) == -1) - return -1; - } - } - } - - return 0; -} - -inline static int -is_vfork_safe(short int flags) -{ - return !(flags & (POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK)); -} - -int -posix_spawn(pid_t *pid, const char *path, - const posix_spawn_file_actions_t *file_actions, - const posix_spawnattr_t *attrp, - char *const argv[], char *const envp[]) -{ - short int flags; - pid_t p; - volatile int error; - - error = 0; - flags = attrp ? attrp->posix_attr_flags : 0; - if (file_actions == NULL && is_vfork_safe(flags)) - p = vfork(); - else -#ifdef THERE_IS_NO_FORK - return ENOSYS; -#else - p = fork(); -#endif - switch (p) { - case -1: - return errno; - case 0: - if (attrp) { - error = posix_spawnattr_handle(attrp); - if (error) - _exit(127); - } - execve(path, argv, envp); - error = errno; - _exit(127); - default: - if (error != 0) - waitpid(p, NULL, WNOHANG); - else if (pid != NULL) - *pid = p; - return error; - } -} - -int -posix_spawnattr_init(posix_spawnattr_t *attr) -{ - - memset(attr, 0, sizeof(*attr)); - attr->posix_attr_flags = 0; - sigprocmask(0, NULL, &attr->posix_attr_sigmask); - sigemptyset(&attr->posix_attr_sigdefault); - return 0; -} - -int -posix_spawnattr_setflags(posix_spawnattr_t *attr, short flags) -{ - - attr->posix_attr_flags = flags; - return 0; -} - -int -posix_spawnattr_setsigmask(posix_spawnattr_t *attr, const sigset_t *sigmask) -{ - - attr->posix_attr_sigmask = *sigmask; - return 0; -} - -int -posix_spawnattr_setsigdefault(posix_spawnattr_t *attr, const sigset_t *sigmask) -{ - - attr->posix_attr_sigdefault = *sigmask; - return 0; -} diff --git a/compat/posix_spawn.h b/compat/posix_spawn.h deleted file mode 100644 index ccfb0f0c..00000000 --- a/compat/posix_spawn.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * dhcpcd - DHCP client daemon - * Copyright (c) 2006-2012 Roy Marples - * All rights reserved - - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef POSIX_SPAWN_H -#define POSIX_SPAWN_H - -#include - -typedef struct { - short posix_attr_flags; -#define POSIX_SPAWN_SETSIGDEF 0x10 -#define POSIX_SPAWN_SETSIGMASK 0x20 - sigset_t posix_attr_sigmask; - sigset_t posix_attr_sigdefault; -} posix_spawnattr_t; - -typedef struct { -// int unused; -} posix_spawn_file_actions_t; - -int posix_spawn(pid_t *, const char *, - const posix_spawn_file_actions_t *, const posix_spawnattr_t *, - char *const [], char *const []); -int posix_spawnattr_init(posix_spawnattr_t *); -int posix_spawnattr_setflags(posix_spawnattr_t *, short); -int posix_spawnattr_setsigmask(posix_spawnattr_t *, const sigset_t *); -int posix_spawnattr_setsigdefault(posix_spawnattr_t *, const sigset_t *); - -#endif diff --git a/configure b/configure index 53984182..71f4c6e9 100755 --- a/configure +++ b/configure @@ -730,29 +730,6 @@ if [ "$ARC4RANDOM_UNIFORM" = no ]; then echo "#include \"compat/arc4random_uniform.h\"" >>$CONFIG_H fi -if [ -z "$GETLINE" ]; then - printf "Testing for getline ... " - cat <_getline.c -#include -int main(void) { - char *buf = NULL; - size_t n = 0; - return getline(&buf, &n, stdin) == -1 ? -1 : 0; -} -EOF - if $XCC _getline.c -o _getline 2>&3; then - GETLINE=yes - else - GETLINE=no - fi - echo "$GETLINE" - rm -f _getline.c _getline -fi -if [ "$GETLINE" = no ]; then - echo "COMPAT_SRCS+= compat/getline.c" >>$CONFIG_MK - echo "#include \"compat/getline.h\"" >>$CONFIG_H -fi - if [ -z "$STRLCPY" ]; then printf "Testing for strlcpy ... " cat <_strlcpy.c @@ -967,38 +944,6 @@ else echo "#define HAVE_SYS_QUEUE_H" >>$CONFIG_H fi -if [ -z "$POSIX_SPAWN" ]; then - printf "Testing for posix_spawn ... " - cat <_posix_spawn.c -#include -#include - -#ifdef __OpenBSD__ -# include -# if OpenBSD<201505 -# error posix_spawn was fixed in OpenBSD-5.7 -# endif -#endif - -int main(void) { - posix_spawn(NULL, NULL, NULL, NULL, NULL, NULL); - return 0; -} -EOF - if $XCC _posix_spawn.c -o _posix_spawn 2>&3; then - POSIX_SPAWN=yes - else - POSIX_SPAWN=no - fi - echo "$POSIX_SPAWN" - rm -f _posix_spawn.c _posix_spawn -fi -if [ "$POSIX_SPAWN" = no ]; then - echo "COMPAT_SRCS+= compat/posix_spawn.c" >>$CONFIG_MK -else - echo "#define HAVE_SPAWN_H" >>$CONFIG_H -fi - if [ -z "$REALLOCARRAY" ]; then printf "Testing for reallocarray ... " cat <_reallocarray.c