+#ifdef HAVE_DIRENT_H
+ /*
+ * Use /proc/self/fd directory if it exists.
+ */
+ dir = opendir("/proc/self/fd");
+ if (dir != NULL) {
+ long my_fd;
+ char *endp;
+ struct dirent *dp;
+
+ while ((dp = readdir(dir)) != NULL) {
+ my_fd = strtol(dp->d_name, &endp, 10);
+ if (my_fd <= 0) continue;
+ if ((dp->d_name != endp) && !*endp) continue;
+
+ if (my_fd == dirfd(dir)) continue;
+ if ((my_fd >= fd) && (my_fd <= maxfd)) {
+ (void) close((int) fd);
+ }
+ }
+ (void) closedir(dir);
+ return 0;
+ }
+#endif
+