From 31e6829bd8661711b8f5ec3d8b4fb7cb6a512ca9 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 14 Sep 2000 21:12:20 +0000 Subject: Fix the halt/reboot/poweroff segfault when used from within an initrd... -Erik --- utility.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) (limited to 'utility.c') diff --git a/utility.c b/utility.c index 4defbfc..8c3c5e5 100644 --- a/utility.c +++ b/utility.c @@ -1360,14 +1360,12 @@ extern pid_t* findPidByName( char* pidName) FILE *status; char filename[256]; char buffer[256]; - char* p; /* If it isn't a number, we don't want it */ if (!isdigit(*next->d_name)) continue; - /* Now open the status file */ - sprintf(filename, "/proc/%s/status", next->d_name); + sprintf(filename, "/proc/%s/cmdline", next->d_name); status = fopen(filename, "r"); if (!status) { continue; @@ -1375,22 +1373,12 @@ extern pid_t* findPidByName( char* pidName) fgets(buffer, 256, status); fclose(status); - /* Make sure we only match on the process name */ - p=buffer+5; /* Skip the name */ - while ((p)++) { - if (*p==0 || *p=='\n') { - *p='\0'; - break; - } - } - p=buffer+6; /* Skip the "Name:\t" */ - - if ((strstr(p, pidName) != NULL) - && (strlen(pidName) == strlen(p))) { + if (strstr(get_last_path_component(buffer), pidName) != NULL) { pidList=xrealloc( pidList, sizeof(pid_t) * (i+2)); pidList[i++]=strtol(next->d_name, NULL, 0); } } + if (pidList) pidList[i]=0; return pidList; -- cgit v1.1