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;
|
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
|
#ifndef KERN_PROC_PROC
|
||||||
/* freebsd 4.x */
|
/* freebsd 4.x */
|
||||||
#define KERN_PROC_PROC KERN_PROC_ALL
|
#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)
|
#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,
|
int sigar_proc_port_get(sigar_t *sigar, int protocol,
|
||||||
unsigned long port, sigar_pid_t *pid)
|
unsigned long port, sigar_pid_t *pid)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue