diff --git a/src/acconfig.h b/src/acconfig.h index dc831577b2c4b98e6745392ed2a693316f13f0d3..2bd41b04e63a0bca172c176f173f4a902422eb3b 100644 --- a/src/acconfig.h +++ b/src/acconfig.h @@ -153,6 +153,9 @@ * __chkstk. */ #undef HAVE_BROKEN_CHKSTK +/* Define if you have a working getcwd */ +#undef HAVE_WORKING_GETCWD + /* Define for solaris */ #undef SOLARIS diff --git a/src/configure.in b/src/configure.in index 947181e7654ea89d4baed94cc48fe306e518e541..12db11f809f5691f6a2283ccddf67565fd99b3cc 100644 --- a/src/configure.in +++ b/src/configure.in @@ -4473,6 +4473,8 @@ AC_CHECK_FUNCS( \ getrlimit \ getrusage \ gettimeofday \ + getwd \ + get_current_dir_name \ inet_ntop \ gmtime_r \ gmtime_s \ @@ -4699,6 +4701,89 @@ int accept(int, struct sockaddr *, Psocklen_t); AC_MSG_RESULT($pike_cv_accept_size_t *) AC_DEFINE_UNQUOTED(ACCEPT_SIZE_T, $pike_cv_accept_size_t) +AC_MSG_CHECKING(for working getcwd) +AC_CACHE_VAL(pike_cv_func_working_getcwd, +[ +AC_TRY_RUN([ +#ifndef _LARGEFILE_SOURCE +# define _FILE_OFFSET_BITS 64 +# define _LARGEFILE_SOURCE +# define _LARGEFILE64_SOURCE 1 +#endif +/* HPUX needs these too... */ +#ifndef __STDC_EXT__ +# define __STDC_EXT__ +#endif /* !__STDC_EXT__ */ + +#ifndef POSIX_SOURCE +#define POSIX_SOURCE +#endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +#ifdef HAVE_DIRECT_H +#include <direct.h> +#endif /* HAVE_DIRECT_H */ +#ifdef HAVE_SYS_WAIT_H +#include <sys/wait.h> +#endif +#include <signal.h> + +#include <stdlib.h> +#include <string.h> + +#ifndef __NT__ +int sig_child(int arg) +{ +#ifdef HAVE_WAITPID + waitpid(-1,0,WNOHANG); +#else +#ifdef HAVE_WAIT3 + wait3(0,WNOHANG,0); +#else +#ifdef HAVE_WAIT4 + wait3(-1,0,WNOHANG,0); +#else + + /* Leave them hanging */ + +#endif /* HAVE_WAIT4 */ +#endif /* HAVE_WAIT3 */ +#endif /* HAVE_WAITPID */ + +#ifdef SIGNAL_ONESHOT + signal(SIGCHLD, sig_child); +#endif +} + +int sig_alarm() { exit(1); } +#endif /* !__NT__ */ + +int main() +{ + char *tmp; +#ifndef __NT__ + signal(SIGCHLD,sig_child); + signal(SIGALRM,sig_alarm); + alarm(4); +#endif /* !__NT__ */ + tmp=getcwd(0,10000); + if(tmp && tmp[0] && (strlen(tmp) < 10000)) { + free(tmp); + exit(0); + } + exit(1); +} +],pike_cv_func_working_getcwd=yes,pike_cv_func_working_getcwd=no, + pike_cv_func_working_getcwd=yes)]) + +if test "$pike_cv_func_working_getcwd" = yes; then + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_WORKING_GETCWD) +else + AC_MSG_RESULT(no) +fi + AC_MSG_CHECKING(if mkdir takes 1 or 2 arguments) AC_CACHE_VAL(pike_cv_func_mkdir_args,[ AC_TRY_COMPILE([ diff --git a/src/modules/_Stdio/acconfig.h b/src/modules/_Stdio/acconfig.h index a71d2cccb84a9e0449abf961161f6fbce00b4252..a05804cb8f98e187233791bc022b093e14714813 100644 --- a/src/modules/_Stdio/acconfig.h +++ b/src/modules/_Stdio/acconfig.h @@ -86,9 +86,6 @@ /* Define if you have strerror. */ #undef HAVE_STRERROR -/* Define if you have a working getcwd */ -#undef HAVE_WORKING_GETCWD - /* Do we have socketpair() ? */ #undef HAVE_SOCKETPAIR diff --git a/src/modules/_Stdio/configure.in b/src/modules/_Stdio/configure.in index 8f3aada3fe3de995f7a4f051240a1e801b5834dd..ffcf9b547e430b41f3e1899fb130b028226162da 100644 --- a/src/modules/_Stdio/configure.in +++ b/src/modules/_Stdio/configure.in @@ -63,7 +63,7 @@ AC_CHECK_LIB(nsl, gethostbyname) AC_CHECK_LIB(net, __get_socket_descriptor) dnl AC_CHECK_LIB(zfs, libzfs_init) -AC_HAVE_FUNCS(getwd readdir_r statvfs statfs ustat lseek64 lstat fsync \ +AC_HAVE_FUNCS(readdir_r statvfs statfs ustat lseek64 lstat fsync \ grantpt unlockpt ptsname posix_openpt socketpair writev sendfile munmap \ madvise poll setsockopt getprotobyname truncate64 ftruncate64 inet_ntoa \ inet_ntop execve listxattr flistxattr getxattr fgetxattr setxattr fsetxattr \ @@ -1272,80 +1272,6 @@ fi AC_DEFINE_UNQUOTED(SOCKET_BUFFER_MAX,$pike_cv_socket_buffer_max) AC_MSG_RESULT($pike_cv_socket_buffer_max) -AC_MSG_CHECKING(for working getcwd) -AC_CACHE_VAL(pike_cv_func_working_getcwd, -[ -AC_TRY_RUN([ -#ifndef _LARGEFILE_SOURCE -# define _FILE_OFFSET_BITS 64 -# define _LARGEFILE_SOURCE -# define _LARGEFILE64_SOURCE 1 -#endif -/* HPUX needs these too... */ -#ifndef __STDC_EXT__ -# define __STDC_EXT__ -#endif /* !__STDC_EXT__ */ - -#ifndef POSIX_SOURCE -#define POSIX_SOURCE -#endif -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif -#ifdef HAVE_DIRECT_H -#include <direct.h> -#endif /* HAVE_DIRECT_H */ -#include <signal.h> - -#ifndef __NT__ -int sig_child(int arg) -{ -#ifdef HAVE_WAITPID - waitpid(-1,0,WNOHANG); -#else -#ifdef HAVE_WAIT3 - wait3(0,WNOHANG,0); -#else -#ifdef HAVE_WAIT4 - wait3(-1,0,WNOHANG,0); -#else - - /* Leave them hanging */ - -#endif /* HAVE_WAIT4 */ -#endif /* HAVE_WAIT3 */ -#endif /* HAVE_WAITPID */ - -#ifdef SIGNAL_ONESHOT - my_signal(SIGCHLD, sig_child); -#endif -} - -int sig_alarm() { exit(1); } -#endif /* !__NT__ */ - -int main() -{ - char *tmp; -#ifndef __NT__ - signal(SIGCHLD,sig_child); - signal(SIGALRM,sig_alarm); - alarm(4); -#endif /* !__NT__ */ - tmp=getcwd(0,10000); - if(tmp && strlen(tmp) <10000) exit(0); - exit(1); -} -],pike_cv_func_working_getcwd=yes,pike_cv_func_working_getcwd=no, - pike_cv_func_working_getcwd=yes)]) - -if test "$pike_cv_func_working_getcwd" = yes; then - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_WORKING_GETCWD) -else - AC_MSG_RESULT(no) -fi - AC_MSG_CHECKING(for pty master device) AC_CACHE_VAL(pike_cv_pty_master_pathname, [ pike_cv_pty_master_pathname=no