From: Guillem Jover Date: Wed, 5 Nov 2014 19:01:53 +0000 (+0100) Subject: Refactor file descriptor closure into a new closefrom_close() X-Git-Tag: 0.8.0~28 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=34df1426653e79d170de399dfadc5b2709f85815;p=thirdparty%2Flibbsd.git 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