← Commit list

b24d65659

Eric Andersen
Eric Andersen
2001-12-06
FAILED Duration: 593s

Subject

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

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

include/libbb.h+1 -1
@@ -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);
init/halt.c+1 -1
@@ -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)
init/poweroff.c+1 -1
@@ -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)
init/reboot.c+1 -1
@@ -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)
libbb/find_pid_by_name.c+9 -21
@@ -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;
procps/kill.c+1 -1
@@ -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) {
procps/pidof.c+1 -1
@@ -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) {