If find_pid_by_name() had an error, it was returning -1, but storing 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 ru
No binary (build failed)
—
(log yok)
| @@ -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); | |
| @@ -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) | |
| @@ -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) | |
| @@ -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) | |
| @@ -40,13 +40,13 @@ | |
| * | |
| * 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; | |
| @@ -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) { | |
| @@ -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) { | |