aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac2
-rw-r--r--src/libstrongswan/utils/utils.c9
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]))