Sophie

Sophie

distrib > Mageia > 1 > i586 > media > core-updates-src > by-pkgid > 83ecf8f3cf39318860f0dc9917c84068 > files > 31

kdebase4-workspace-4.6.5-1.4.mga1.src.rpm

commit 2793abc90ee56301c10cb69cf3251543ce9c84b6
Author: Mad Fish <MadFishTheOne@gmail.com>
Date:   Mon Jul 4 01:14:58 2011 +0200

    Extract process name from command line in ksysguardd on Linux.
    
    Signed-off-by: Mad Fish <MadFishTheOne@gmail.com>
    (cherry picked from commit 3aa82c97006bf345356960cb2d5114cbc334d8d6)

diff --git a/ksysguard/ksysguardd/Linux/ProcessList.c b/ksysguard/ksysguardd/Linux/ProcessList.c
index 06ff0d9..4dc3dde 100644
--- a/ksysguard/ksysguardd/Linux/ProcessList.c
+++ b/ksysguard/ksysguardd/Linux/ProcessList.c
@@ -333,13 +333,28 @@ static bool getProcess( int pid, ProcessInfo *ps )
 
   ps->cmdline[ 0 ] = '\0';
 
+  unsigned int processNameStartPosition = 0;
+  unsigned int firstZeroPosition = -1U;
+ 
   unsigned int i =0;
   while( (ps->cmdline[i] = fgetc(fd)) != EOF && i < sizeof(ps->cmdline)-3) {
     if(ps->cmdline[i] == '\0')
+    {
       ps->cmdline[i] = ' ';
+      if(firstZeroPosition == -1U)
+        firstZeroPosition = i;
+    }
+    if(ps->cmdline[i] == '/' && firstZeroPosition == -1U)
+      processNameStartPosition = i + 1;
     i++;
   }
 
+  if(firstZeroPosition != -1U)
+  {
+    unsigned int processNameLength = firstZeroPosition - processNameStartPosition;
+    memcpy(ps->name, ps->cmdline + processNameStartPosition, processNameLength);
+    ps->name[processNameLength] = '\0';
+  }
 
   if(i > 2) {
     if(ps->cmdline[i-2] == ' ') ps->cmdline[i-2] = '\0';