detect solaris version, use it to skip init_libproc if >= solaris 10.
This commit is contained in:
		
							parent
							
								
									88a67ff368
								
							
						
					
					
						commit
						9a071a99a4
					
				@ -172,6 +172,8 @@ typedef char * (*proc_exename_func_t)(struct ps_prochandle *, char *, size_t);
 | 
			
		||||
struct sigar_t {
 | 
			
		||||
    SIGAR_T_BASE;
 | 
			
		||||
 | 
			
		||||
    int solaris_version;
 | 
			
		||||
 | 
			
		||||
    kstat_ctl_t *kc;
 | 
			
		||||
 | 
			
		||||
    /* kstat_lookup() as needed */
 | 
			
		||||
 | 
			
		||||
@ -7,6 +7,7 @@
 | 
			
		||||
#include <sys/proc.h>
 | 
			
		||||
#include <sys/swap.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <sys/utsname.h>
 | 
			
		||||
#include <dlfcn.h>
 | 
			
		||||
 | 
			
		||||
#define KSTAT_LIST_INIT(sigar, dev) \
 | 
			
		||||
@ -22,10 +23,21 @@ int sigar_os_open(sigar_t **sig)
 | 
			
		||||
    kstat_t *ksp;
 | 
			
		||||
    sigar_t *sigar;
 | 
			
		||||
    int i, status;
 | 
			
		||||
    struct utsname name;
 | 
			
		||||
    char *ptr;
 | 
			
		||||
 | 
			
		||||
    sigar = malloc(sizeof(*sigar));
 | 
			
		||||
    *sig = sigar;
 | 
			
		||||
 | 
			
		||||
    uname(&name);
 | 
			
		||||
    if ((ptr = strchr(name.release, '.'))) {
 | 
			
		||||
        ptr++;
 | 
			
		||||
        sigar->solaris_version = atoi(ptr);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        sigar->solaris_version = 6;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    sigar->pagesize = 0;
 | 
			
		||||
    i = sysconf(_SC_PAGESIZE);
 | 
			
		||||
    while ((i >>= 1) > 0) {
 | 
			
		||||
@ -827,13 +839,12 @@ int sigar_proc_exe_get(sigar_t *sigar, sigar_pid_t pid,
 | 
			
		||||
    char buffer[BUFSIZ];
 | 
			
		||||
    struct ps_prochandle *phandle;
 | 
			
		||||
 | 
			
		||||
    if ((status = sigar_init_libproc(sigar)) != SIGAR_OK) {
 | 
			
		||||
        return status;
 | 
			
		||||
    if (sigar->solaris_version >= 10) {
 | 
			
		||||
        return sigar_proc_path_exe_get(sigar, pid, procexe);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!sigar->pdirname) {
 | 
			
		||||
        /* XXX detect solaris 10+ and skip init_libproc */
 | 
			
		||||
        return sigar_proc_path_exe_get(sigar, pid, procexe);
 | 
			
		||||
    if ((status = sigar_init_libproc(sigar)) != SIGAR_OK) {
 | 
			
		||||
        return status;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    procexe->name[0] = '\0';
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user