Implement proc_env for Darwin
This commit is contained in:
		
							parent
							
								
									a0a31eb6e3
								
							
						
					
					
						commit
						457212edcb
					
				@ -1,3 +1,7 @@
 | 
				
			|||||||
 | 
					2006-08-25  Doug MacEachern  <dougm@hyperic.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        * Implement proc_env for Darwin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2006-08-24  Doug MacEachern  <dougm@hyperic.com>
 | 
					2006-08-24  Doug MacEachern  <dougm@hyperic.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        * Sigar.getProc*(String) methods now convert PTQL queries
 | 
					        * Sigar.getProc*(String) methods now convert PTQL queries
 | 
				
			||||||
 | 
				
			|||||||
@ -1046,7 +1046,63 @@ int sigar_proc_env_get(sigar_t *sigar, sigar_pid_t pid,
 | 
				
			|||||||
                       sigar_proc_env_t *procenv)
 | 
					                       sigar_proc_env_t *procenv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef DARWIN
 | 
					#ifdef DARWIN
 | 
				
			||||||
    return SIGAR_ENOTIMPL;
 | 
					    int status, count;
 | 
				
			||||||
 | 
					    sigar_kern_proc_args_t kargs;
 | 
				
			||||||
 | 
					    char *ptr, *end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    status = sigar_kern_proc_args_get(pid, &kargs);
 | 
				
			||||||
 | 
					    if (status != SIGAR_OK) {
 | 
				
			||||||
 | 
					        return status;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    count = kargs.count;
 | 
				
			||||||
 | 
					    ptr = kargs.ptr;
 | 
				
			||||||
 | 
					    end = kargs.end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* skip over argv */
 | 
				
			||||||
 | 
					    while ((ptr < end) && (count-- > 0)) {
 | 
				
			||||||
 | 
					        int alen = strlen(ptr)+1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ptr += alen;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (ptr >= end) {
 | 
				
			||||||
 | 
					        return ENOENT;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* into environ */
 | 
				
			||||||
 | 
					    while (ptr < end) {
 | 
				
			||||||
 | 
					        char *val = strchr(ptr, '=');
 | 
				
			||||||
 | 
					        int klen, vlen, status;
 | 
				
			||||||
 | 
					        char key[256]; /* XXX is there a max key size? */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (val == NULL) {
 | 
				
			||||||
 | 
					            /* not key=val format */
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        klen = val - ptr;
 | 
				
			||||||
 | 
					        SIGAR_SSTRCPY(key, ptr);
 | 
				
			||||||
 | 
					        key[klen] = '\0';
 | 
				
			||||||
 | 
					        ++val;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        vlen = strlen(val);
 | 
				
			||||||
 | 
					        status = procenv->env_getter(procenv->data,
 | 
				
			||||||
 | 
					                                     key, klen, val, vlen);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (status != SIGAR_OK) {
 | 
				
			||||||
 | 
					            /* not an error; just stop iterating */
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ptr += (klen + 1 + vlen + 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (*ptr == '\0') {
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return SIGAR_OK;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
    char **env;
 | 
					    char **env;
 | 
				
			||||||
    struct kinfo_proc *pinfo;
 | 
					    struct kinfo_proc *pinfo;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user