From f232ddcdcb1908bd5b8db0d7bca44d3d9e66d68b Mon Sep 17 00:00:00 2001 From: Drazen Kacar Date: Mon, 17 May 1999 16:37:38 +0000 Subject: [PATCH] Implemented what Solaris has to offer cheaply. It sucks, but digging in * procargs.c: Implemented what Solaris has to offer cheaply. It sucks, but digging in process address space would be too slow. --- sysdeps/solaris/ChangeLog | 6 ++++++ sysdeps/solaris/procargs.c | 29 +++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/sysdeps/solaris/ChangeLog b/sysdeps/solaris/ChangeLog index 9b69af31..492054f5 100644 --- a/sysdeps/solaris/ChangeLog +++ b/sysdeps/solaris/ChangeLog @@ -1,3 +1,9 @@ +1999-05-17 Drazen Kacar + + * procargs.c: Implemented what Solaris has to offer cheaply. + It sucks, but digging in process address space would be + too slow. + 1999-05-11 Drazen Kacar * proctime.c: Return 0 usage times for scheaduler (PID 0). diff --git a/sysdeps/solaris/procargs.c b/sysdeps/solaris/procargs.c index 7d010d5e..60c52d01 100644 --- a/sysdeps/solaris/procargs.c +++ b/sysdeps/solaris/procargs.c @@ -26,7 +26,8 @@ #include #include -static const unsigned long _glibtop_sysdeps_proc_args = 0; +static const unsigned long _glibtop_sysdeps_proc_args = +(1L << GLIBTOP_PROC_ARGS_SIZE); /* Init function. */ @@ -42,6 +43,30 @@ char * glibtop_get_proc_args_s (glibtop *server, glibtop_proc_args *buf, pid_t pid, unsigned max_len) { + struct psinfo pinfo; + int len; + char *ret; + memset (buf, 0, sizeof (glibtop_proc_args)); - return NULL; + + if(glibtop_get_proc_data_psinfo_s(server, &pinfo, pid)) + return NULL; + + len = strlen(pinfo.pr_psargs); + if(max_len) + { + ret = glibtop_malloc_r(server, max_len + 1); + if(max_len < len) + len = max_len; + memcpy(ret, pinfo.pr_psargs, len); + ret[len] = 0; + return ret; + } + ret = glibtop_malloc_r(server, len + 1); + memcpy(ret, pinfo.pr_psargs, len); + ret[len] = 0; + + buf->size = len; + buf->flags = _glibtop_sysdeps_proc_args; + return ret; }