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