move proc_fdinfo_get for re-use
This commit is contained in:
parent
b12956364f
commit
4b712b5da0
|
@ -686,6 +686,39 @@ int sigar_loadavg_get(sigar_t *sigar,
|
|||
return SIGAR_OK;
|
||||
}
|
||||
|
||||
#if defined(DARWIN) && defined(DARWIN_HAS_LIBPROC_H)
|
||||
|
||||
static int proc_fdinfo_get(sigar_t *sigar, sigar_pid_t pid, int *num)
|
||||
{
|
||||
int rsize;
|
||||
const int init_size = PROC_PIDLISTFD_SIZE * 32;
|
||||
|
||||
if (sigar->ifconf_len == 0) {
|
||||
sigar->ifconf_len = init_size;
|
||||
sigar->ifconf_buf = malloc(sigar->ifconf_len);
|
||||
}
|
||||
|
||||
while (1) {
|
||||
rsize = proc_pidinfo(pid, PROC_PIDLISTFDS, 0,
|
||||
sigar->ifconf_buf, sigar->ifconf_len);
|
||||
if (rsize <= 0) {
|
||||
return errno;
|
||||
}
|
||||
if ((rsize + PROC_PIDLISTFD_SIZE) < sigar->ifconf_len) {
|
||||
break;
|
||||
}
|
||||
|
||||
sigar->ifconf_len += init_size;
|
||||
sigar->ifconf_buf = realloc(sigar->ifconf_buf, sigar->ifconf_len);
|
||||
}
|
||||
|
||||
*num = rsize / PROC_PIDLISTFD_SIZE;
|
||||
|
||||
return SIGAR_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef KERN_PROC_PROC
|
||||
/* freebsd 4.x */
|
||||
#define KERN_PROC_PROC KERN_PROC_ALL
|
||||
|
@ -2596,35 +2629,6 @@ int sigar_proc_port_get(sigar_t *sigar, int protocol,
|
|||
|
||||
#elif defined(DARWIN) && defined(DARWIN_HAS_LIBPROC_H)
|
||||
|
||||
#define FDS_INCR (PROC_PIDLISTFD_SIZE * 32)
|
||||
|
||||
static int proc_fdinfo_get(sigar_t *sigar, sigar_pid_t pid, int *num)
|
||||
{
|
||||
int rsize;
|
||||
if (sigar->ifconf_len == 0) {
|
||||
sigar->ifconf_len = FDS_INCR;
|
||||
sigar->ifconf_buf = malloc(sigar->ifconf_len);
|
||||
}
|
||||
|
||||
while (1) {
|
||||
rsize = proc_pidinfo(pid, PROC_PIDLISTFDS, 0,
|
||||
sigar->ifconf_buf, sigar->ifconf_len);
|
||||
if (rsize <= 0) {
|
||||
return errno;
|
||||
}
|
||||
if ((rsize + PROC_PIDLISTFD_SIZE) < sigar->ifconf_len) {
|
||||
break;
|
||||
}
|
||||
|
||||
sigar->ifconf_len += FDS_INCR;
|
||||
sigar->ifconf_buf = realloc(sigar->ifconf_buf, sigar->ifconf_len);
|
||||
}
|
||||
|
||||
*num = rsize / PROC_PIDLISTFD_SIZE;
|
||||
|
||||
return SIGAR_OK;
|
||||
}
|
||||
|
||||
int sigar_proc_port_get(sigar_t *sigar, int protocol,
|
||||
unsigned long port, sigar_pid_t *pid)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue