Fall back to execve/wait when execvp and waitpid are unavailable.

This commit is contained in:
Bill Currie 2012-08-19 13:18:38 +09:00
parent ceea60059a
commit 358ea4ef9a
2 changed files with 12 additions and 3 deletions

View file

@ -10,11 +10,11 @@ AC_FUNC_VPRINTF
AC_FUNC_VA_COPY AC_FUNC_VA_COPY
AC_FUNC__VA_COPY AC_FUNC__VA_COPY
AC_CHECK_FUNCS( AC_CHECK_FUNCS(
access _access connect dlopen fcntl ftime _ftime getaddrinfo \ access _access connect dlopen execvp fcntl ftime _ftime getaddrinfo \
gethostbyname gethostname getnameinfo getpagesize gettimeofday getuid \ gethostbyname gethostname getnameinfo getpagesize gettimeofday getuid \
getwd ioctl mkdir _mkdir mprotect putenv select snprintf _snprintf \ getwd ioctl mkdir _mkdir mprotect putenv select snprintf _snprintf \
socket stat strcasestr strerror strnlen strsep strstr vsnprintf \ socket stat strcasestr strerror strnlen strsep strstr vsnprintf \
_vsnprintf _vsnprintf wait
) )
DL_LIBS="" DL_LIBS=""

View file

@ -259,7 +259,11 @@ preprocess_file (const char *filename, const char *ext)
printf ("%s ", *a); printf ("%s ", *a);
puts(""); puts("");
} }
#ifdef HAVE_EXECVP
execvp (cpp_argv[0], (char **)cpp_argv); execvp (cpp_argv[0], (char **)cpp_argv);
#else
execve (cpp_argv[0], (char **)cpp_argv, environ);
#endif
perror (cpp_argv[0]); perror (cpp_argv[0]);
exit (1); exit (1);
} else { } else {
@ -268,7 +272,12 @@ preprocess_file (const char *filename, const char *ext)
pid_t rc; pid_t rc;
// printf ("pid = %d\n", pid); // printf ("pid = %d\n", pid);
if ((rc = waitpid (0, &status, 0 | WUNTRACED)) != pid) { #ifdef HAVE_WAITPID
rc = waitpid (0, &status, 0 | WUNTRACED);
#else
rc = wait (&status);
#endif
if ((rc) != pid) {
if (rc == -1) { if (rc == -1) {
perror ("wait"); perror ("wait");
return 0; return 0;