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
	
	Block a user