Add configure checks for the exec functions we will dummy out. This

is only really needed on Mac OS X when symbol interposition is being
performed but won't hurt elsewhere.
This commit is contained in:
Todd C. Miller
2013-08-21 10:09:04 -06:00
parent b0f5c498f8
commit 40b24c5da0
4 changed files with 475 additions and 37 deletions

View File

@@ -137,9 +137,21 @@
/* Define to 1 if you have the <endian.h> header file. */ /* Define to 1 if you have the <endian.h> header file. */
#undef HAVE_ENDIAN_H #undef HAVE_ENDIAN_H
/* Define to 1 if you have the `exect' function. */
#undef HAVE_EXECT
/* Define to 1 if you have the `execvP' function. */
#undef HAVE_EXECVP
/* Define to 1 if you have the `execvpe' function. */
#undef HAVE_EXECVPE
/* Define to 1 if your system has the F_CLOSEM fcntl. */ /* Define to 1 if your system has the F_CLOSEM fcntl. */
#undef HAVE_FCNTL_CLOSEM #undef HAVE_FCNTL_CLOSEM
/* Define to 1 if you have the `fexecve' function. */
#undef HAVE_FEXECVE
/* Define to 1 if you have the `fgetln' function. */ /* Define to 1 if you have the `fgetln' function. */
#undef HAVE_FGETLN #undef HAVE_FGETLN
@@ -433,6 +445,12 @@
/* Define to 1 if you have the `posix_openpt' function. */ /* Define to 1 if you have the `posix_openpt' function. */
#undef HAVE_POSIX_OPENPT #undef HAVE_POSIX_OPENPT
/* Define to 1 if you have the `posix_spawn' function. */
#undef HAVE_POSIX_SPAWN
/* Define to 1 if you have the `posix_spawnp' function. */
#undef HAVE_POSIX_SPAWNP
/* Define to 1 if you have the `priv_set' function. */ /* Define to 1 if you have the `priv_set' function. */
#undef HAVE_PRIV_SET #undef HAVE_PRIV_SET
@@ -724,6 +742,33 @@
/* Define to 1 if the system has the type `_Bool'. */ /* Define to 1 if the system has the type `_Bool'. */
#undef HAVE__BOOL #undef HAVE__BOOL
/* Define to 1 if you have the `_execl' function. */
#undef HAVE__EXECL
/* Define to 1 if you have the `_execle' function. */
#undef HAVE__EXECLE
/* Define to 1 if you have the `_execlp' function. */
#undef HAVE__EXECLP
/* Define to 1 if you have the `_exect' function. */
#undef HAVE__EXECT
/* Define to 1 if you have the `_execv' function. */
#undef HAVE__EXECV
/* Define to 1 if you have the `_execve' function. */
#undef HAVE__EXECVE
/* Define to 1 if you have the `_execvP' function. */
#undef HAVE__EXECVP
/* Define to 1 if you have the `_execvpe' function. */
#undef HAVE__EXECVPE
/* Define to 1 if you have the `_fexecve' function. */
#undef HAVE__FEXECVE
/* Define to 1 if you have the `_getpty' function. */ /* Define to 1 if you have the `_getpty' function. */
#undef HAVE__GETPTY #undef HAVE__GETPTY
@@ -736,9 +781,42 @@
/* Define to 1 if you have the `_nss_XbyY_buf_alloc' function. */ /* Define to 1 if you have the `_nss_XbyY_buf_alloc' function. */
#undef HAVE__NSS_XBYY_BUF_ALLOC #undef HAVE__NSS_XBYY_BUF_ALLOC
/* Define to 1 if you have the `_posix_spawn' function. */
#undef HAVE__POSIX_SPAWN
/* Define to 1 if you have the `_posix_spawnp' function. */
#undef HAVE__POSIX_SPAWNP
/* Define to 1 if you have the `_ttyname_dev' function. */ /* Define to 1 if you have the `_ttyname_dev' function. */
#undef HAVE__TTYNAME_DEV #undef HAVE__TTYNAME_DEV
/* Define to 1 if you have the `__execl' function. */
#undef HAVE___EXECL
/* Define to 1 if you have the `__execle' function. */
#undef HAVE___EXECLE
/* Define to 1 if you have the `__execlp' function. */
#undef HAVE___EXECLP
/* Define to 1 if you have the `__exect' function. */
#undef HAVE___EXECT
/* Define to 1 if you have the `__execv' function. */
#undef HAVE___EXECV
/* Define to 1 if you have the `__execve' function. */
#undef HAVE___EXECVE
/* Define to 1 if you have the `__execvP' function. */
#undef HAVE___EXECVP
/* Define to 1 if you have the `__execvpe' function. */
#undef HAVE___EXECVPE
/* Define to 1 if you have the `__fexecve' function. */
#undef HAVE___FEXECVE
/* Define to 1 if the compiler supports the C99 __func__ variable. */ /* Define to 1 if the compiler supports the C99 __func__ variable. */
#undef HAVE___FUNC__ #undef HAVE___FUNC__
@@ -751,6 +829,12 @@
/* Define to 1 if you have the `__nss_XbyY_buf_alloc' function. */ /* Define to 1 if you have the `__nss_XbyY_buf_alloc' function. */
#undef HAVE___NSS_XBYY_BUF_ALLOC #undef HAVE___NSS_XBYY_BUF_ALLOC
/* Define to 1 if you have the `__posix_spawn' function. */
#undef HAVE___POSIX_SPAWN
/* Define to 1 if you have the `__posix_spawnp' function. */
#undef HAVE___POSIX_SPAWNP
/* Define to 1 if your crt0.o defines the __progname symbol for you. */ /* Define to 1 if your crt0.o defines the __progname symbol for you. */
#undef HAVE___PROGNAME #undef HAVE___PROGNAME

238
configure vendored
View File

@@ -14586,6 +14586,7 @@ done
if test $OSMAJOR -ge 8; then if test $OSMAJOR -ge 8; then
$as_echo "#define HAVE___INTERPOSE 1" >>confdefs.h $as_echo "#define HAVE___INTERPOSE 1" >>confdefs.h
dlyld_interpose=yes
else else
RTLD_PRELOAD_ENABLE_VAR="DYLD_FORCE_FLAT_NAMESPACE" RTLD_PRELOAD_ENABLE_VAR="DYLD_FORCE_FLAT_NAMESPACE"
fi fi
@@ -17850,6 +17851,243 @@ fi
fi fi
fi fi
if test X"$with_noexec" != X"no"; then
# Check for underscore versions of standard exec functions
# unless we are using dyld symbole interposition
if test X"$dlyld_interpose" != X"yes"; then
for ac_func in _execl __execl
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
for ac_func in _execle __execle
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
for ac_func in _execlp __execlp
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
for ac_func in _execv __execv
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
for ac_func in _execve __execve
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
for ac_func in _execvp __execvp
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
fi
# Check for non-standard exec functions including underscore versions
for ac_func in exect
do :
ac_fn_c_check_func "$LINENO" "exect" "ac_cv_func_exect"
if test "x$ac_cv_func_exect" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_EXECT 1
_ACEOF
if test X"$dlyld_interpose" != X"yes"; then
for ac_func in _exect __exect
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
fi
fi
done
for ac_func in execvP
do :
ac_fn_c_check_func "$LINENO" "execvP" "ac_cv_func_execvP"
if test "x$ac_cv_func_execvP" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_EXECVP 1
_ACEOF
if test X"$dlyld_interpose" != X"yes"; then
for ac_func in _execvP __execvP
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
fi
fi
done
for ac_func in execvpe
do :
ac_fn_c_check_func "$LINENO" "execvpe" "ac_cv_func_execvpe"
if test "x$ac_cv_func_execvpe" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_EXECVPE 1
_ACEOF
if test X"$dlyld_interpose" != X"yes"; then
for ac_func in _execvpe __execvpe
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
fi
fi
done
for ac_func in fexecve
do :
ac_fn_c_check_func "$LINENO" "fexecve" "ac_cv_func_fexecve"
if test "x$ac_cv_func_fexecve" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_FEXECVE 1
_ACEOF
if test X"$dlyld_interpose" != X"yes"; then
for ac_func in _fexecve __fexecve
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
fi
fi
done
# Check for posix_spawn, posix_spawnp and any underscore versions
for ac_func in posix_spawn
do :
ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn"
if test "x$ac_cv_func_posix_spawn" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_POSIX_SPAWN 1
_ACEOF
if test X"$dlyld_interpose" != X"yes"; then
for ac_func in _posix_spawn __posix_spawn
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
fi
fi
done
for ac_func in posix_spawnp
do :
ac_fn_c_check_func "$LINENO" "posix_spawnp" "ac_cv_func_posix_spawnp"
if test "x$ac_cv_func_posix_spawnp" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_POSIX_SPAWNP 1
_ACEOF
if test X"$dlyld_interpose" != X"yes"; then
for ac_func in _posix_spawnp __posix_spawnp
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
cat >>confdefs.h <<_ACEOF
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF
fi
done
fi
fi
done
fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */ /* end confdefs.h. */
#include <sys/types.h> #include <sys/types.h>

View File

@@ -1966,6 +1966,7 @@ case "$host" in
# Darwin 8 and above can interpose library symbols cleanly # Darwin 8 and above can interpose library symbols cleanly
if test $OSMAJOR -ge 8; then if test $OSMAJOR -ge 8; then
AC_DEFINE(HAVE___INTERPOSE) AC_DEFINE(HAVE___INTERPOSE)
dlyld_interpose=yes
else else
RTLD_PRELOAD_ENABLE_VAR="DYLD_FORCE_FLAT_NAMESPACE" RTLD_PRELOAD_ENABLE_VAR="DYLD_FORCE_FLAT_NAMESPACE"
fi fi
@@ -2392,6 +2393,54 @@ if test X"$ac_cv_type_struct_timespec" != X"no"; then
[AC_CHECK_MEMBER([struct stat.st_mtim.st__tim], AC_DEFINE(HAVE_ST__TIM))], [AC_CHECK_MEMBER([struct stat.st_mtim.st__tim], AC_DEFINE(HAVE_ST__TIM))],
[AC_CHECK_MEMBER([struct stat.st_mtimespec], AC_DEFINE([HAVE_ST_MTIMESPEC]))]) [AC_CHECK_MEMBER([struct stat.st_mtimespec], AC_DEFINE([HAVE_ST_MTIMESPEC]))])
fi fi
dnl
dnl Function checks for sudo_noexec
dnl
if test X"$with_noexec" != X"no"; then
# Check for underscore versions of standard exec functions
# unless we are using dyld symbole interposition
if test X"$dlyld_interpose" != X"yes"; then
AC_CHECK_FUNCS(_execl __execl)
AC_CHECK_FUNCS(_execle __execle)
AC_CHECK_FUNCS(_execlp __execlp)
AC_CHECK_FUNCS(_execv __execv)
AC_CHECK_FUNCS(_execve __execve)
AC_CHECK_FUNCS(_execvp __execvp)
fi
# Check for non-standard exec functions including underscore versions
AC_CHECK_FUNCS(exect, [
if test X"$dlyld_interpose" != X"yes"; then
AC_CHECK_FUNCS(_exect __exect)
fi
])
AC_CHECK_FUNCS(execvP, [
if test X"$dlyld_interpose" != X"yes"; then
AC_CHECK_FUNCS(_execvP __execvP)
fi
])
AC_CHECK_FUNCS(execvpe, [
if test X"$dlyld_interpose" != X"yes"; then
AC_CHECK_FUNCS(_execvpe __execvpe)
fi
])
AC_CHECK_FUNCS(fexecve, [
if test X"$dlyld_interpose" != X"yes"; then
AC_CHECK_FUNCS(_fexecve __fexecve)
fi
])
# Check for posix_spawn, posix_spawnp and any underscore versions
AC_CHECK_FUNCS(posix_spawn, [
if test X"$dlyld_interpose" != X"yes"; then
AC_CHECK_FUNCS(_posix_spawn __posix_spawn)
fi
])
AC_CHECK_FUNCS(posix_spawnp, [
if test X"$dlyld_interpose" != X"yes"; then
AC_CHECK_FUNCS(_posix_spawnp __posix_spawnp)
fi
])
fi
dnl dnl
dnl Check for the dirfd function/macro. If not found, look for dd_fd in DIR. dnl Check for the dirfd function/macro. If not found, look for dd_fd in DIR.
dnl dnl

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2004-2005, 2010-2012 Todd C. Miller <Todd.Miller@courtesan.com> * Copyright (c) 2004-2005, 2010-2013 Todd C. Miller <Todd.Miller@courtesan.com>
* *
* Permission to use, copy, modify, and distribute this software for any * Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@@ -39,22 +39,22 @@ typedef struct interpose_s {
void *orig_func; void *orig_func;
} interpose_t; } interpose_t;
# define FN_NAME(fn) my_ ## fn # define FN_NAME(fn) dummy_ ## fn
# define INTERPOSE(fn) \ # define INTERPOSE(fn) \
__attribute__((used)) static const interpose_t _interpose_ ## fn \ __attribute__((__used__)) static const interpose_t interpose_ ## fn \
__attribute__((section("__DATA,__interpose"))) = \ __attribute__((__section__("__DATA,__interpose"))) = \
{ (void *)my_ ## fn, (void *)fn }; { (void *)dummy_ ## fn, (void *)fn };
#else #else
# define FN_NAME(fn) fn # define FN_NAME(fn) fn
# define INTERPOSE(fn) # define INTERPOSE(fn)
#endif #endif
/* /*
* Dummy versions of the execve() family of syscalls. We don't need * Dummy versions of the exec(3) family of syscalls. It is not enough
* to stub out all of them, just the ones that correspond to actual * to just dummy out execve(2) since some C libraries use direct syscalls
* system calls (which varies by OS). Note that it is still possible * for the other functions instead of calling execve(2). Note that it is
* to access the real syscalls via the syscall() interface but very * still possible to access the real syscalls via the syscall(2) interface
* few programs actually do that. * but very few programs actually do that.
*/ */
#define DUMMY_BODY \ #define DUMMY_BODY \
@@ -87,51 +87,118 @@ FN_NAME(fn)(t1 a1, t2 a2, ...) \
DUMMY_BODY \ DUMMY_BODY \
INTERPOSE(fn) INTERPOSE(fn)
/*
* Standard exec(3) family of functions.
*/
DUMMY_VA(execl, const char *, const char *) DUMMY_VA(execl, const char *, const char *)
DUMMY_VA(execle, const char *, const char *) DUMMY_VA(execle, const char *, const char *)
DUMMY_VA(execlp, const char *, const char *) DUMMY_VA(execlp, const char *, const char *)
DUMMY2(execv, const char *, char * const *) DUMMY2(execv, const char *, char * const *)
DUMMY2(execvp, const char *, char * const *) DUMMY2(execvp, const char *, char * const *)
DUMMY3(execvP, const char *, const char *, char * const *)
DUMMY3(execve, const char *, char * const *, char * const *) DUMMY3(execve, const char *, char * const *, char * const *)
#ifndef __APPLE__
/* /*
* On Mac OS X we can only define functions that actually * Private versions of the above.
* exist on the system due to how interposition is done.
*/ */
DUMMY3(exect, const char *, char * const *, char * const *) #ifdef HAVE__EXECL
DUMMY3(execvpe, const char *, char * const *, char * const *)
DUMMY3(fexecve, int , char * const *, char * const *)
DUMMY_VA(_execl, const char *, const char *) DUMMY_VA(_execl, const char *, const char *)
DUMMY_VA(_execle, const char *, const char *) #endif
DUMMY_VA(_execlp, const char *, const char *) #ifdef HAVE___EXECL
DUMMY3(_exect, const char *, char * const *, char * const *)
DUMMY2(_execv, const char *, char * const *)
DUMMY2(_execvp, const char *, char * const *)
DUMMY3(_execvP, const char *, const char *, char * const *)
DUMMY3(_execve, const char *, char * const *, char * const *)
DUMMY3(_execvpe, const char *, char * const *, char * const *)
DUMMY3(_fexecve, int , char * const *, char * const *)
DUMMY_VA(__execl, const char *, const char *) DUMMY_VA(__execl, const char *, const char *)
#endif
#ifdef HAVE__EXECLE
DUMMY_VA(_execle, const char *, const char *)
#endif
#ifdef HAVE___EXECLE
DUMMY_VA(__execle, const char *, const char *) DUMMY_VA(__execle, const char *, const char *)
#endif
#ifdef HAVE__EXECLP
DUMMY_VA(_execlp, const char *, const char *)
#endif
#ifdef HAVE___EXECLP
DUMMY_VA(__execlp, const char *, const char *) DUMMY_VA(__execlp, const char *, const char *)
DUMMY3(__exect, const char *, char * const *, char * const *) #endif
#ifdef HAVE__EXECV
DUMMY2(_execv, const char *, char * const *)
#endif
#ifdef HAVE___EXECV
DUMMY2(__execv, const char *, char * const *) DUMMY2(__execv, const char *, char * const *)
#endif
#ifdef HAVE__EXECVP
DUMMY2(_execvp, const char *, char * const *)
#endif
#ifdef HAVE___EXECVP
DUMMY2(__execvp, const char *, char * const *) DUMMY2(__execvp, const char *, char * const *)
DUMMY3(__execvP, const char *, const char *, char * const *) #endif
#ifdef HAVE__EXECVE
DUMMY3(_execve, const char *, char * const *, char * const *)
#endif
#ifdef HAVE___EXECVE
DUMMY3(__execve, const char *, char * const *, char * const *) DUMMY3(__execve, const char *, char * const *, char * const *)
DUMMY3(__execvpe, const char *, char * const *, char * const *) #endif
DUMMY3(__fexecve, int , char * const *, char * const *)
#endif /* __APPLE__ */
#ifdef HAVE_SPAWN_H /*
* Non-standard exec functions and corresponding private versions.
*/
#ifdef HAVE_EXECVP
DUMMY3(execvP, const char *, const char *, char * const *)
#endif
#ifdef HAVE__EXECVP
DUMMY3(_execvP, const char *, const char *, char * const *)
#endif
#ifdef HAVE___EXECVP
DUMMY3(__execvP, const char *, const char *, char * const *)
#endif
#ifdef HAVE_EXECVPE
DUMMY3(execvpe, const char *, char * const *, char * const *)
#endif
#ifdef HAVE__EXECVPE
DUMMY3(_execvpe, const char *, char * const *, char * const *)
#endif
#ifdef HAVE___EXECVPE
DUMMY3(__execvpe, const char *, char * const *, char * const *)
#endif
#ifdef HAVE_EXECT
DUMMY3(exect, const char *, char * const *, char * const *)
#endif
#ifdef HAVE__EXECT
DUMMY3(_exect, const char *, char * const *, char * const *)
#endif
#ifdef HAVE___EXECT
DUMMY3(__exect, const char *, char * const *, char * const *)
#endif
#ifdef HAVE_FEXECVE
DUMMY3(fexecve, int , char * const *, char * const *)
#endif
#ifdef HAVE__FEXECVE
DUMMY3(_fexecve, int , char * const *, char * const *)
#endif
#ifdef HAVE___FEXECVE
DUMMY3(__fexecve, int , char * const *, char * const *)
#endif
/*
* posix_spawn, posix_spawnp and any private versions.
*/
#ifdef HAVE_POSIX_SPAWN
DUMMY6(posix_spawn, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) DUMMY6(posix_spawn, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *)
DUMMY6(posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) #endif
# ifndef __APPLE__ #ifdef HAVE__POSIX_SPAWN
DUMMY6(_posix_spawn, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) DUMMY6(_posix_spawn, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *)
DUMMY6(_posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) #endif
#ifdef HAVE___POSIX_SPAWN
DUMMY6(__posix_spawn, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) DUMMY6(__posix_spawn, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *)
#endif
#ifdef HAVE_POSIX_SPAWNP
DUMMY6(posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *)
#endif
#ifdef HAVE_POSIX__SPAWNP
DUMMY6(_posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *)
#endif
#ifdef HAVE_POSIX___SPAWNP
DUMMY6(__posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) DUMMY6(__posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *)
# endif /* __APPLE__ */ #endif
#endif /* HAVE_SPAWN_H */