diff --git a/src/os/hpux/hpux_sigar.c b/src/os/hpux/hpux_sigar.c index 3f20d762..dac0ffb6 100644 --- a/src/os/hpux/hpux_sigar.c +++ b/src/os/hpux/hpux_sigar.c @@ -16,6 +16,10 @@ * USA. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include "sigar.h" #include "sigar_private.h" #include "sigar_util.h" @@ -416,7 +420,11 @@ int sigar_proc_fd_get(sigar_t *sigar, sigar_pid_t pid, { struct pst_status status; int idx, i, n; +#ifdef HAVE_STRUCT_PST_FILEINFO2 + struct pst_fileinfo2 psf[16]; +#else struct pst_fileinfo psf[16]; +#endif procfd->total = 0; @@ -424,6 +432,18 @@ int sigar_proc_fd_get(sigar_t *sigar, sigar_pid_t pid, return errno; } + /* HPUX 11.31 removed the deprecated pstat_getfile call */ +#ifdef HAVE_STRUCT_PST_FILEINFO2 + idx = status.pst_idx; + + while ((n = pstat_getfile2(psf, sizeof(psf[0]), + sizeof(psf)/sizeof(psf[0]), + idx, pid)) > 0) + { + procfd->total += n; + idx = psf[n-1].psf_fd; + } +#else /* man pstat_getfile for index splaination */ idx = (status.pst_idx << 16) | (0 & 0xffff); @@ -434,6 +454,7 @@ int sigar_proc_fd_get(sigar_t *sigar, sigar_pid_t pid, procfd->total += n; idx = psf[n-1].psf_idx + 1; } +#endif if (n == -1) { return errno;