From 50dc0f6f2d7003ad4fabcff05b14917a30a5c0e5 Mon Sep 17 00:00:00 2001 From: Gilles Chehade Date: Sun, 10 Nov 2019 19:55:21 +0100 Subject: conditionally build waitpid() --- configure.ac | 2 ++ openbsd-compat/Makefile.am | 5 +++++ openbsd-compat/bsd-waitpid.c | 53 -------------------------------------------- openbsd-compat/waitpid.c | 50 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 57 insertions(+), 53 deletions(-) delete mode 100644 openbsd-compat/bsd-waitpid.c create mode 100644 openbsd-compat/waitpid.c diff --git a/configure.ac b/configure.ac index 7912abc6..13c8aa5f 100644 --- a/configure.ac +++ b/configure.ac @@ -2024,6 +2024,8 @@ AM_CONDITIONAL([NEED_STRSEP], [test "x$ac_cv_have_strsep" != "xyes"]) AM_CONDITIONAL([NEED_STRTONUM], [test "x$ac_cv_have_strtonum" != "xyes"]) AM_CONDITIONAL([NEED_STRNDUP], [test "x$ac_cv_have_strndup" != "xyes"]) AM_CONDITIONAL([NEED_STRNLEN], [test "x$ac_cv_have_strnlen" != "xyes"]) + +AM_CONDITIONAL([NEED_WAITPID], [test "x$ac_cv_have_waitpid" != "xyes"]) ## diff --git a/openbsd-compat/Makefile.am b/openbsd-compat/Makefile.am index 3bccf09c..1a0fe160 100644 --- a/openbsd-compat/Makefile.am +++ b/openbsd-compat/Makefile.am @@ -135,6 +135,11 @@ if NEED_STRNLEN libopenbsd_compat_a_SOURCES += strnlen.c endif +if NEED_WAITPID +libopenbsd_compat_a_SOURCES += waitpid.c +endif + + if !SUPPORT_ERR_H libopenbsd_compat_a_SOURCES += bsd-err.c diff --git a/openbsd-compat/bsd-waitpid.c b/openbsd-compat/bsd-waitpid.c deleted file mode 100644 index 40e6ffaa..00000000 --- a/openbsd-compat/bsd-waitpid.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2000 Ben Lindstrom. 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 ``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 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. - */ - -#include "includes.h" - -#ifndef HAVE_WAITPID -#include -#include -#include "bsd-waitpid.h" - -pid_t -waitpid(int pid, int *stat_loc, int options) -{ - union wait statusp; - pid_t wait_pid; - - if (pid <= 0) { - if (pid != -1) { - errno = EINVAL; - return (-1); - } - /* wait4() wants pid=0 for indiscriminate wait. */ - pid = 0; - } - wait_pid = wait4(pid, &statusp, options, NULL); - if (stat_loc) - *stat_loc = (int) statusp.w_status; - - return (wait_pid); -} - -#endif /* !HAVE_WAITPID */ diff --git a/openbsd-compat/waitpid.c b/openbsd-compat/waitpid.c new file mode 100644 index 00000000..3ef68a53 --- /dev/null +++ b/openbsd-compat/waitpid.c @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2000 Ben Lindstrom. 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 ``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 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. + */ + +#include "includes.h" + +#include +#include +#include "bsd-waitpid.h" + +pid_t +waitpid(int pid, int *stat_loc, int options) +{ + union wait statusp; + pid_t wait_pid; + + if (pid <= 0) { + if (pid != -1) { + errno = EINVAL; + return (-1); + } + /* wait4() wants pid=0 for indiscriminate wait. */ + pid = 0; + } + wait_pid = wait4(pid, &statusp, options, NULL); + if (stat_loc) + *stat_loc = (int) statusp.w_status; + + return (wait_pid); +} -- cgit v1.2.3-59-g8ed1b