Use pst_highestfd from pstat_getproc() on HP-UX.
This commit is contained in:
@@ -29,10 +29,14 @@
|
||||
# endif
|
||||
#endif /* STDC_HEADERS */
|
||||
#include <fcntl.h>
|
||||
#ifdef HAVE_DIRENT_H
|
||||
#ifdef HAVE_PSTAT_GETPROC
|
||||
# include <sys/param.h>
|
||||
# include <sys/pstat.h>
|
||||
#else
|
||||
# ifdef HAVE_DIRENT_H
|
||||
# include <dirent.h>
|
||||
# define NAMLEN(dirent) strlen((dirent)->d_name)
|
||||
#else
|
||||
# else
|
||||
# define dirent direct
|
||||
# define NAMLEN(dirent) (dirent)->d_namlen
|
||||
# ifdef HAVE_SYS_NDIR_H
|
||||
@@ -44,6 +48,7 @@
|
||||
# ifdef HAVE_NDIR_H
|
||||
# include <ndir.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "missing.h"
|
||||
@@ -84,15 +89,28 @@ closefrom_fallback(int lowfd)
|
||||
* Close all file descriptors greater than or equal to lowfd.
|
||||
* We try the fast way first, falling back on the slow method.
|
||||
*/
|
||||
#ifdef HAVE_FCNTL_CLOSEM
|
||||
#if defined(HAVE_FCNTL_CLOSEM)
|
||||
void
|
||||
closefrom(int lowfd)
|
||||
{
|
||||
if (fcntl(lowfd, F_CLOSEM, 0) == -1)
|
||||
closefrom_fallback(lowfd);
|
||||
}
|
||||
#else
|
||||
# ifdef HAVE_DIRFD
|
||||
#elif defined(HAVE_PSTAT_GETPROC)
|
||||
void
|
||||
closefrom(int lowfd)
|
||||
{
|
||||
struct pst_status pstat;
|
||||
int fd;
|
||||
|
||||
if (pstat_getproc(&pstat, sizeof(pstat), 0, getpid()) != -1) {
|
||||
for (fd = lowfd; fd <= pstat.pst_highestfd; fd++)
|
||||
(void) close(fd);
|
||||
} else {
|
||||
closefrom_fallback(lowfd);
|
||||
}
|
||||
}
|
||||
#elif defined(HAVE_DIRFD)
|
||||
void
|
||||
closefrom(int lowfd)
|
||||
{
|
||||
@@ -113,5 +131,4 @@ closefrom(int lowfd)
|
||||
} else
|
||||
closefrom_fallback(lowfd);
|
||||
}
|
||||
#endif /* HAVE_DIRFD */
|
||||
#endif /* HAVE_FCNTL_CLOSEM */
|
||||
|
Reference in New Issue
Block a user