Commit 34df1426653e79d170de399dfadc5b2709f85815

Guillem Jover 2014-11-05T20:01:53

Refactor file descriptor closure into a new closefrom_close()

diff --git a/src/closefrom.c b/src/closefrom.c
index 423a004..03e84d8 100644
--- a/src/closefrom.c
+++ b/src/closefrom.c
@@ -60,6 +60,17 @@
 # define closefrom	closefrom_fallback
 #endif
 
+static inline void
+closefrom_close(int fd)
+{
+#ifdef __APPLE__
+	/* Avoid potential libdispatch crash when we close its fds. */
+	(void)fcntl(fd, F_SETFD, FD_CLOEXEC);
+#else
+	(void)close(fd);
+#endif
+}
+
 /*
  * Close all file descriptors greater than or equal to lowfd.
  * This is the expensive (fallback) method.
@@ -82,14 +93,8 @@ closefrom_fallback(int lowfd)
 	if (maxfd < 0)
 		maxfd = OPEN_MAX;
 
-	for (fd = lowfd; fd < maxfd; fd++) {
-#ifdef __APPLE__
-		/* Avoid potential libdispatch crash when we close its fds. */
-		(void)fcntl((int)fd, F_SETFD, FD_CLOEXEC);
-#else
-		(void)close((int)fd);
-#endif
-	}
+	for (fd = lowfd; fd < maxfd; fd++)
+		closefrom_close(fd);
 }
 
 /*
@@ -138,15 +143,8 @@ closefrom(int lowfd)
 			int fd;
 
 			fd = strtonum(dent->d_name, lowfd, INT_MAX, &errstr);
-			if (errstr == NULL && fd != dirfd(dirp)) {
-# ifdef __APPLE__
-				/* Avoid potential libdispatch crash when we
-				 * close its fds. */
-				(void)fcntl(fd, F_SETFD, FD_CLOEXEC);
-# else
-				(void)close(fd);
-# endif
-			}
+			if (errstr == NULL && fd != dirfd(dirp))
+				closefrom_close(fd);
 		}
 		(void)closedir(dirp);
 	} else