From 73aa5252e8c215a6722534b94493036bc2e55612 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Tue, 29 Aug 2006 01:36:42 +0000 Subject: [PATCH] add/use kern_proc_args_skip_argv --- src/os/darwin/darwin_sigar.c | 40 ++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/src/os/darwin/darwin_sigar.c b/src/os/darwin/darwin_sigar.c index fd6eaea2..0cd8ce13 100644 --- a/src/os/darwin/darwin_sigar.c +++ b/src/os/darwin/darwin_sigar.c @@ -972,6 +972,30 @@ static int sigar_kern_proc_args_get(sigar_pid_t pid, return SIGAR_OK; } + +static int kern_proc_args_skip_argv(sigar_kern_proc_args_t *kargs) +{ + char *ptr = kargs->ptr; + char *end = kargs->end; + int count = kargs->count; + + /* skip over argv */ + while ((ptr < end) && (count-- > 0)) { + int alen = strlen(ptr)+1; + + ptr += alen; + } + + kargs->ptr = ptr; + kargs->end = end; + kargs->count = 0; + + if (ptr >= end) { + return ENOENT; + } + + return SIGAR_OK; +} #endif int sigar_proc_args_get(sigar_t *sigar, sigar_pid_t pid, @@ -1075,21 +1099,15 @@ int sigar_proc_env_get(sigar_t *sigar, sigar_pid_t pid, return status; } + status = kern_proc_args_skip_argv(&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, '=');