some checks for /proc
This commit is contained in:
		
							parent
							
								
									00580471d5
								
							
						
					
					
						commit
						2d375e1f3f
					
				@ -118,6 +118,9 @@ int sigar_os_open(sigar_t **sigar)
 | 
			
		||||
    int ncpu;
 | 
			
		||||
    size_t len;
 | 
			
		||||
    struct timeval boottime;
 | 
			
		||||
#ifndef DARWIN
 | 
			
		||||
    struct stat sb;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    len = sizeof(ncpu);
 | 
			
		||||
    mib[0] = CTL_HW;
 | 
			
		||||
@ -139,6 +142,12 @@ int sigar_os_open(sigar_t **sigar)
 | 
			
		||||
    (*sigar)->mach_port = mach_host_self();
 | 
			
		||||
#else
 | 
			
		||||
    (*sigar)->kmem = kvm_open(NULL, NULL, NULL, O_RDONLY, "kvm_open");
 | 
			
		||||
    if (stat("/proc/curproc", &sb) < 0) {
 | 
			
		||||
        (*sigar)->proc_mounted = 0;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        (*sigar)->proc_mounted = 1;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    get_koffsets(*sigar);
 | 
			
		||||
@ -170,6 +179,8 @@ char *sigar_os_error_string(int err)
 | 
			
		||||
    switch (err) {
 | 
			
		||||
      case SIGAR_EPERM_KMEM:
 | 
			
		||||
        return "Failed to open /dev/kmem for reading";
 | 
			
		||||
      case SIGAR_EPROC_NOENT:
 | 
			
		||||
        return "/proc filesystem is not mounted";
 | 
			
		||||
      default:
 | 
			
		||||
        return NULL;
 | 
			
		||||
    }
 | 
			
		||||
@ -688,6 +699,9 @@ int sigar_proc_args_get(sigar_t *sigar, sigar_pid_t pid,
 | 
			
		||||
#ifdef DARWIN
 | 
			
		||||
    return SIGAR_ENOTIMPL;
 | 
			
		||||
#else
 | 
			
		||||
    if (!sigar->proc_mounted) {
 | 
			
		||||
        return SIGAR_EPROC_NOENT;
 | 
			
		||||
    }
 | 
			
		||||
    return sigar_procfs_args_get(sigar, pid, procargs);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -28,9 +28,11 @@ struct sigar_t {
 | 
			
		||||
    kvm_t *kmem;
 | 
			
		||||
    /* offsets for seeking on kmem */
 | 
			
		||||
    unsigned long koffsets[KOFFSET_MAX];
 | 
			
		||||
    int proc_mounted;
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define SIGAR_EPERM_KMEM (SIGAR_OS_START_ERROR+1)
 | 
			
		||||
#define SIGAR_EPROC_NOENT (SIGAR_OS_START_ERROR+2)
 | 
			
		||||
 | 
			
		||||
#endif /* SIGAR_OS_H */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user