From 6d9cd1d66b9817c2975b63b49ef9e6b8ef9fc30e Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Tue, 4 Aug 2015 19:17:37 +0200 Subject: utils: Check for dirfd(3) Not all POSIX compatible systems might provide it yet. If not, we close the lowest FD to close and hope it gets reused by opendir(). --- src/libstrongswan/utils/utils.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/libstrongswan/utils/utils.c') 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])) -- cgit v1.2.3