More little stuff.
authorErik Andersen <andersen@codepoet.org>
Tue, 18 Apr 2000 20:00:03 +0000 (20:00 -0000)
committerErik Andersen <andersen@codepoet.org>
Tue, 18 Apr 2000 20:00:03 +0000 (20:00 -0000)
 -Erik

Makefile
kill.c
procps/kill.c
utility.c

index 30fd718..5d246f1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,7 @@ export VERSION
 # Set the following to `true' to make a debuggable build.
 # Leave this set to `false' for production use.
 # eg: `make DODEBUG=true tests'
-DODEBUG = false
+DODEBUG = true
 
 # If you want a static binary, turn this on.
 DOSTATIC = false
diff --git a/kill.c b/kill.c
index db48424..93f02ea 100644 (file)
--- a/kill.c
+++ b/kill.c
@@ -222,12 +222,15 @@ extern int kill_main(int argc, char **argv)
        } 
 #ifdef BB_KILLALL
        else {
+               pid_t myPid=getpid();
                /* Looks like they want to do a killall.  Do that */
                while (--argc >= 0) {
                        pid_t* pidList;
 
                        pidList = findPidByName( *argv);
-                       for(; pidList && pidList!=0; pidList++) {
+                       for(; pidList && *pidList!=0; pidList++) {
+                               if (*pidList==myPid)
+                                       continue;
                                if (kill(*pidList, sig) != 0) 
                                        fatalError( "Could not kill pid '%d': %s\n", *pidList, strerror(errno));
                        }
index db48424..93f02ea 100644 (file)
@@ -222,12 +222,15 @@ extern int kill_main(int argc, char **argv)
        } 
 #ifdef BB_KILLALL
        else {
+               pid_t myPid=getpid();
                /* Looks like they want to do a killall.  Do that */
                while (--argc >= 0) {
                        pid_t* pidList;
 
                        pidList = findPidByName( *argv);
-                       for(; pidList && pidList!=0; pidList++) {
+                       for(; pidList && *pidList!=0; pidList++) {
+                               if (*pidList==myPid)
+                                       continue;
                                if (kill(*pidList, sig) != 0) 
                                        fatalError( "Could not kill pid '%d': %s\n", *pidList, strerror(errno));
                        }
index b844c3b..29934cd 100644 (file)
--- a/utility.c
+++ b/utility.c
@@ -1291,12 +1291,21 @@ extern pid_t* findPidByName( char* pidName)
 
        /* Now search for a match */
        for (i=1; i<pid_array[0] ; i++) {
+               char* p;
                struct pid_info info;
 
            info.pid = pid_array[i];
            if (ioctl (fd, DEVPS_GET_PID_INFO, &info)<0)
                        fatalError( "\nDEVPS_GET_PID_INFO: %s\n", strerror (errno));
 
+               /* Make sure we only match on the process name */
+               p=info.command_line+1;
+               while ((*p != 0) && !isspace(*(p)) && (*(p-1) != '\\')) { 
+                       (p)++;
+               }
+               if (isspace(*(p)))
+                               *p='\0';
+
                if ((strstr(info.command_line, pidName) != NULL)) {
                        pidList=realloc( pidList, sizeof(pid_t) * (j+2));
                        if (pidList==NULL)
@@ -1304,7 +1313,8 @@ extern pid_t* findPidByName( char* pidName)
                        pidList[j++]=info.pid;
                }
        }
-       pidList[j]=0;
+       if (pidList)
+               pidList[j]=0;
 
        /* Free memory */
        free( pid_array);
@@ -1343,7 +1353,7 @@ extern pid_t* findPidByName( char* pidName)
                FILE *status;
                char filename[256];
                char buffer[256];
-               char* p;
+               char* p, *q;
 
                /* If it isn't a number, we don't want it */
                if (!isdigit(*next->d_name))
@@ -1358,15 +1368,25 @@ extern pid_t* findPidByName( char* pidName)
                fgets(buffer, 256, status);
                fclose(status);
 
-               if (((p=strstr(buffer, pidName)) != NULL)
-                               && (strncmp(p, pidName, strlen(pidName)) != 0)) {
+               /* 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 (((q=strstr(q, pidName)) != NULL)
+                               && (strncmp(q, pidName, strlen(pidName)) != 0)) {
                        pidList=realloc( pidList, sizeof(pid_t) * (i+2));
                        if (pidList==NULL)
                                fatalError("out of memory\n");
                        pidList[i++]=strtol(next->d_name, NULL, 0);
                }
        }
-       if (pidList!=NULL)
+       if (pidList)
                pidList[i]=0;
        return pidList;
 }