From 2ea3ddc135f0b635e6c9e1ff9346231244ced631 Mon Sep 17 00:00:00 2001 From: Mike Massonnet Date: Fri, 11 Sep 2009 15:33:00 +0200 Subject: [PATCH] Small factorize on cmdline reading --- ChangeLog | 4 ++++ src/taskmanager-linux.c | 25 ++++++++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3e6086e..3bdf00b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2009-09-11 Mike Massonnet + + * Small factorize on cmdline reading. + 2009-09-09 Mike Massonnet * Show command line arguments in Linux. diff --git a/src/taskmanager-linux.c b/src/taskmanager-linux.c index 90b49c5..1aee86d 100644 --- a/src/taskmanager-linux.c +++ b/src/taskmanager-linux.c @@ -34,6 +34,7 @@ static void get_cmdline(gint pid, gchar *cmdline, gint length, gchar *cmdline_fu char *args = NULL; int c; int i = 0, j = 0; + int cmdline_found = 0; char buffer[4096]; int idummy; @@ -44,15 +45,19 @@ static void get_cmdline(gint pid, gchar *cmdline, gint length, gchar *cmdline_fu } /* read byte per byte until EOF */ - while (EOF != (c = fgetc (file))) { - if (c != 0) { - cmdline_full[i++] = c; - } else { + for (i = 0; (c = fgetc (file)) != EOF; i++) { + if (c == 0) { + c = ' '; + cmdline_found = 1; if (args == NULL) { args = cmdline_full + i; } - cmdline_full[i++] = ' '; } + if (!cmdline_found) { + cmdline[i] = c; + cmdline[i+1] = '\0'; + } + cmdline_full[i] = c; if (i == length_full - 1) { break; @@ -97,18 +102,16 @@ static void get_cmdline(gint pid, gchar *cmdline, gint length, gchar *cmdline_fu } /* get the short version */ - snprintf (filename, 255, "/proc/%i/cmdline", pid); - file = fopen (filename, "r"); - fgets (cmdline, length, file); - fclose (file); - p = strchr (cmdline, ':'); if (NULL != p) { *p = '\0'; } else { p = strrchr (cmdline, '/'); if (NULL != p) { - strncpy (cmdline, p+1, length); + for (i = p - cmdline + 1, j = 0; cmdline[i] != '\0'; i++, j++) { + cmdline[j] = cmdline[i]; + } + cmdline[j] = '\0'; } }