summaryrefslogtreecommitdiffstats
path: root/src/proc-linux.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/proc-linux.c')
-rw-r--r--src/proc-linux.c42
1 files changed, 24 insertions, 18 deletions
diff --git a/src/proc-linux.c b/src/proc-linux.c
index 997825e..080293e 100644
--- a/src/proc-linux.c
+++ b/src/proc-linux.c
@@ -30,7 +30,8 @@
#include "proc.h"
-struct _proc_t
+/* adapted from procps */
+struct _proc_stat_t
{
int pid;
int ppid; /* stat,status pid of parent process */
@@ -258,14 +259,14 @@ link_name (guint maj,
}
char *
-proc_get_cmd (proc_t *stat)
+proc_stat_get_cmd (proc_stat_t *stat)
{
return g_strdup (stat->cmd);
}
/* adapted from procps */
char *
-proc_get_tty (proc_t *stat)
+proc_stat_get_tty (proc_stat_t *stat)
{
guint dev;
char *tty;
@@ -311,8 +312,8 @@ proc_get_tty (proc_t *stat)
#define KLF "l"
/* adapted from procps */
static void
-stat2proc (const char *S,
- proc_t *P)
+stat2proc (const char *S,
+ proc_stat_t *P)
{
unsigned num;
char * tmp;
@@ -375,15 +376,16 @@ stat2proc (const char *S,
}
gboolean
-proc_stat_pid (pid_t pid,
- proc_t **stat)
+proc_stat_new_for_pid (pid_t pid,
+ proc_stat_t **stat,
+ GError **error)
{
- char *path;
- char *contents;
- gsize length;
- gboolean res;
- GError *error;
- proc_t *proc;
+ char *path;
+ char *contents;
+ gsize length;
+ gboolean res;
+ GError *local_error;
+ proc_stat_t *proc;
if (stat == NULL) {
return FALSE;
@@ -392,15 +394,19 @@ proc_stat_pid (pid_t pid,
path = g_strdup_printf ("/proc/%d/stat", pid);
contents = NULL;
+ local_error = NULL;
res = g_file_get_contents (path,
&contents,
&length,
- &error);
+ &local_error);
if (res) {
- proc = g_new0 (proc_t, 1);
+ proc = g_new0 (proc_stat_t, 1);
proc->pid = pid;
stat2proc (contents, proc);
*stat = proc;
+ } else {
+ g_propagate_error (error, local_error);
+ *stat = NULL;
}
g_free (contents);
@@ -410,14 +416,14 @@ proc_stat_pid (pid_t pid,
}
void
-proc_free (proc_t *stat)
+proc_stat_free (proc_stat_t *stat)
{
g_free (stat);
}
char *
-proc_get_env (pid_t pid,
- const char *var)
+proc_pid_get_env (pid_t pid,
+ const char *var)
{
char *path;
gboolean res;