diff options
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/libstrongswan/utils/utils.c | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index 18132757c..545f1fb58 100644 --- a/configure.ac +++ b/configure.ac @@ -583,7 +583,7 @@ AC_CHECK_FUNC( ) AC_CHECK_FUNCS(prctl mallinfo getpass closefrom getpwnam_r getgrnam_r getpwuid_r) -AC_CHECK_FUNCS(fmemopen funopen mmap memrchr setlinebuf strptime) +AC_CHECK_FUNCS(fmemopen funopen mmap memrchr setlinebuf strptime dirfd) AC_CHECK_FUNC([syslog], [ AC_DEFINE([HAVE_SYSLOG], [], [have syslog(3) and friends]) diff --git a/src/libstrongswan/utils/utils.c b/src/libstrongswan/utils/utils.c index c396540ec..b4a4db802 100644 --- a/src/libstrongswan/utils/utils.c +++ b/src/libstrongswan/utils/utils.c @@ -175,10 +175,19 @@ void closefrom(int low_fd) DIR *dir; struct dirent *entry; +#ifndef HAVE_DIRFD + /* if we don't have dirfd() lets close the lowest FD and hope it gets reused + * by opendir() */ + close(low_fd); + dir_fd = low_fd++; +#endif + dir = opendir(FD_DIR); if (dir) { +#ifdef HAVE_DIRFD dir_fd = dirfd(dir); +#endif while ((entry = readdir(dir))) { if (!isdigit(entry->d_name[0])) |