If find_pid_by_name() had an error, it was returning -1, but storing
authorEric Andersen <andersen@codepoet.org>
Thu, 6 Dec 2001 14:52:32 +0000 (14:52 -0000)
committerEric Andersen <andersen@codepoet.org>
Thu, 6 Dec 2001 14:52:32 +0000 (14:52 -0000)
that into a pid_t, which is unsigned on a number archs.  Furthermore,
find_pid_by_name() would _never_ return an error if the intended proces
was "init", but instead would return 1, meaning we would fail to work
on 2.4.x kernels running an initrd...
 -Erik

include/libbb.h
init/halt.c
init/poweroff.c
init/reboot.c
libbb/find_pid_by_name.c
procps/kill.c
procps/pidof.c

index 2dcfa1f4d975f22d3ba54cb03b64578271a825ad..a953b3cb060420a49017637708803f1a8e1c6790 100644 (file)
@@ -116,7 +116,7 @@ extern void write_mtab(char* blockDevice, char* directory,
        char* filesystemType, long flags, char* string_flags);
 extern void erase_mtab(const char * name);
 extern long atoi_w_units (const char *cp);
-extern pid_t* find_pid_by_name( char* pidName);
+extern long* find_pid_by_name( char* pidName);
 extern char *find_real_root_device_name(const char* name);
 extern char *get_line_from_file(FILE *file);
 extern void print_file(FILE *file);
index 307c1022d3404c97b96a9d2665ac364a3e27ac9c..917de8b5a26dcafd62ce8b0c43b355e90c80b40d 100644 (file)
@@ -28,7 +28,7 @@ extern int halt_main(int argc, char **argv)
 {
 #ifdef CONFIG_FEATURE_INITRD
        /* don't assume init's pid == 1 */
-       pid_t *pid = find_pid_by_name("init");
+       long *pid = find_pid_by_name("init");
        if (!pid || *pid<=0) {
                pid = find_pid_by_name("linuxrc");
                if (!pid || *pid<=0)
index cec2d6dddcadaf45d93ee4ad4492104eea1d12d7..d99b5562d5b7fa06483953831468879cc309aafd 100644 (file)
@@ -28,7 +28,7 @@ extern int poweroff_main(int argc, char **argv)
 {
 #ifdef CONFIG_FEATURE_INITRD
        /* don't assume init's pid == 1 */
-       pid_t *pid = find_pid_by_name("init");
+       long *pid = find_pid_by_name("init");
        if (!pid || *pid<=0) {
                pid = find_pid_by_name("linuxrc");
                if (!pid || *pid<=0)
index a13d424921d590317d6e1a570ee01d278050743d..6f71536d8fdb8bf7f0d984a72515b861a52c76f0 100644 (file)
@@ -28,7 +28,7 @@ extern int reboot_main(int argc, char **argv)
 {
 #ifdef CONFIG_FEATURE_INITRD
        /* don't assume init's pid == 1 */
-       pid_t *pid = find_pid_by_name("init");
+       long *pid = find_pid_by_name("init");
        if (!pid || *pid<=0) {
                pid = find_pid_by_name("linuxrc");
                if (!pid || *pid<=0)
index f183cc0bd9de3a43bb0559dc0a03b44a7cb06f2f..4eaee03e32a72cc1e4ae8f6aa5c47a3c4dcb191b 100644 (file)
  *
  *  Returns a list of all matching PIDs
  */
-extern pid_t* find_pid_by_name( char* pidName)
+extern long* find_pid_by_name( char* pidName)
 {
        int fd, i, j;
        char device[] = "/dev/ps";
        pid_t num_pids;
        pid_t* pid_array = NULL;
-       pid_t* pidList=NULL;
+       long* pidList=NULL;
 
        /* open device */ 
        fd = open(device, O_RDONLY);
@@ -87,20 +87,14 @@ extern pid_t* find_pid_by_name( char* pidName)
 
                if ((strstr(info.command_line, pidName) != NULL)
                                && (strlen(pidName) == strlen(info.command_line))) {
-                       pidList=xrealloc( pidList, sizeof(pid_t) * (j+2));
+                       pidList=xrealloc( pidList, sizeof(long) * (j+2));
                        pidList[j++]=info.pid;
                }
        }
        if (pidList) {
                pidList[j]=0;
-       } else if ( strcmp(pidName, "init")==0) {
-               /* If we found nothing and they were trying to kill "init", 
-                * guess PID 1 and call it good...  Perhaps we should simply
-                * exit if /proc isn't mounted, but this will do for now. */
-               pidList=xrealloc( pidList, sizeof(pid_t));
-               pidList[0]=1;
        } else {
-               pidList=xrealloc( pidList, sizeof(pid_t));
+               pidList=xrealloc( pidList, sizeof(long));
                pidList[0]=-1;
        }
 
@@ -124,11 +118,11 @@ extern pid_t* find_pid_by_name( char* pidName)
  *
  *  Returns a list of all matching PIDs
  */
-extern pid_t* find_pid_by_name( char* pidName)
+extern long* find_pid_by_name( char* pidName)
 {
        DIR *dir;
        struct dirent *next;
-       pid_t* pidList=NULL;
+       long* pidList=NULL;
        int i=0;
 
        dir = opendir("/proc");
@@ -162,21 +156,15 @@ extern pid_t* find_pid_by_name( char* pidName)
                /* Buffer should contain a string like "Name:   binary_name" */
                sscanf(buffer, "%*s %s", name);
                if (strcmp(name, pidName) == 0) {
-                       pidList=xrealloc( pidList, sizeof(pid_t) * (i+2));
+                       pidList=xrealloc( pidList, sizeof(long) * (i+2));
                        pidList[i++]=strtol(next->d_name, NULL, 0);
                }
        }
 
-       if (pidList)
+       if (pidList) {
                pidList[i]=0;
-       else if ( strcmp(pidName, "init")==0) {
-               /* If we found nothing and they were trying to kill "init", 
-                * guess PID 1 and call it good...  Perhaps we should simply
-                * exit if /proc isn't mounted, but this will do for now. */
-               pidList=xrealloc( pidList, sizeof(pid_t));
-               pidList[0]=1;
        } else {
-               pidList=xrealloc( pidList, sizeof(pid_t));
+               pidList=xrealloc( pidList, sizeof(long));
                pidList[0]=-1;
        }
        return pidList;
index 8b8a9922cbf0c98385a6ac8bc63c58037ee5636d..7147b5727cb6be3d490584e36e890712a081e54d 100644 (file)
@@ -114,7 +114,7 @@ extern int kill_main(int argc, char **argv)
                pid_t myPid=getpid();
                /* Looks like they want to do a killall.  Do that */
                while (--argc >= 0) {
-                       pid_t* pidList;
+                       long* pidList;
 
                        pidList = find_pid_by_name( *argv);
                        if (!pidList || *pidList<=0) {
index 5a40288dc95d1ebba2a3e40296d20d589f7df254..9415827042a98b1c796cef19605faa0f45047d37 100644 (file)
@@ -58,7 +58,7 @@ extern int pidof_main(int argc, char **argv)
 
        /* Looks like everything is set to go. */
        while(optind < argc) {
-               pid_t* pidList;
+               long* pidList;
 
                pidList = find_pid_by_name( argv[optind]);
                if (!pidList || *pidList<=0) {