Apply last_patch93 from vodz:

andersen@busybox.net wrote:
    >Message: 4
    >Modified Files:
    >       init.c
    >Log Message:
    >Remove code for unsupported kernel versions

    Hmm. Current init.c have check >= 2.2.0 kernel one time too.
    Ok. Last patch removed this point and move common init code to new file for
    /init dir
This commit is contained in:
Eric Andersen 2003-06-27 17:08:15 +00:00
parent 0b0d393347
commit b01ed65ad2
7 changed files with 61 additions and 73 deletions

View File

@ -33,6 +33,28 @@ INIT-$(CONFIG_POWEROFF) += poweroff.o
INIT-$(CONFIG_REBOOT) += reboot.o INIT-$(CONFIG_REBOOT) += reboot.o
INIT-$(CONFIG_START_STOP_DAEMON) += start_stop_daemon.o INIT-$(CONFIG_START_STOP_DAEMON) += start_stop_daemon.o
ifeq ($(CONFIG_HALT), y)
CONFIG_INIT_SHARED=y
else
ifeq ($(CONFIG_INIT), y)
CONFIG_INIT_SHARED=y
else
ifeq ($(CONFIG_POWEROFF), y)
CONFIG_INIT_SHARED=y
else
ifeq ($(CONFIG_REBOOT), y)
CONFIG_INIT_SHARED=y
else
CONFIG_INIT_SHARED=n
endif
endif
endif
endif
ifeq ($(CONFIG_INIT_SHARED), y)
INIT-$(CONFIG_INIT_SHARED) += init_shared.o
endif
libraries-y+=$(INIT_DIR)$(INIT_AR) libraries-y+=$(INIT_DIR)$(INIT_AR)
$(INIT_DIR)$(INIT_AR): $(patsubst %,$(INIT_DIR)%, $(INIT-y)) $(INIT_DIR)$(INIT_AR): $(patsubst %,$(INIT_DIR)%, $(INIT-y))

View File

@ -23,19 +23,10 @@
#include "busybox.h" #include "busybox.h"
#include <signal.h> #include <signal.h>
#include "init_shared.h"
extern int halt_main(int argc, char **argv) extern int halt_main(int argc, char **argv)
{ {
#ifdef CONFIG_FEATURE_INITRD return kill_init(SIGUSR1);
/* don't assume init's pid == 1 */
long *pid = find_pid_by_name("init");
if (!pid || *pid<=0) {
pid = find_pid_by_name("linuxrc");
if (!pid || *pid<=0)
bb_error_msg_and_die("no process killed");
}
return(kill(*pid, SIGUSR1));
#else
return(kill(1, SIGUSR1));
#endif
} }

View File

@ -43,6 +43,10 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/wait.h> #include <sys/wait.h>
#include "busybox.h" #include "busybox.h"
#include "init_shared.h"
#ifdef CONFIG_SYSLOGD #ifdef CONFIG_SYSLOGD
# include <sys/syslog.h> # include <sys/syslog.h>
#endif #endif
@ -152,7 +156,6 @@ struct init_action {
/* Static variables */ /* Static variables */
static struct init_action *init_action_list = NULL; static struct init_action *init_action_list = NULL;
static int kernelVersion;
static char console[CONSOLE_BUFF_SIZE] = _PATH_CONSOLE; static char console[CONSOLE_BUFF_SIZE] = _PATH_CONSOLE;
#ifndef CONFIG_SYSLOGD #ifndef CONFIG_SYSLOGD
@ -764,7 +767,7 @@ static void halt_signal(int sig)
/* allow time for last message to reach serial console */ /* allow time for last message to reach serial console */
sleep(2); sleep(2);
if (sig == SIGUSR2 && kernelVersion >= KERNEL_VERSION(2, 2, 0)) if (sig == SIGUSR2)
init_reboot(RB_POWER_OFF); init_reboot(RB_POWER_OFF);
else else
init_reboot(RB_HALT_SYSTEM); init_reboot(RB_HALT_SYSTEM);
@ -1014,15 +1017,7 @@ extern int init_main(int argc, char **argv)
int status; int status;
if (argc > 1 && !strcmp(argv[1], "-q")) { if (argc > 1 && !strcmp(argv[1], "-q")) {
/* don't assume init's pid == 1 */ return kill_init(SIGHUP);
long *pid = find_pid_by_name("init");
if (!pid || *pid <= 0) {
pid = find_pid_by_name("linuxrc");
if (!pid || *pid <= 0)
bb_error_msg_and_die("no process killed");
}
return kill(*pid, SIGHUP);
} }
#ifndef DEBUG_INIT #ifndef DEBUG_INIT
/* Expect to be invoked as init with PID=1 or be invoked as linuxrc */ /* Expect to be invoked as init with PID=1 or be invoked as linuxrc */
@ -1049,9 +1044,6 @@ extern int init_main(int argc, char **argv)
init_reboot(RB_DISABLE_CAD); init_reboot(RB_DISABLE_CAD);
#endif #endif
/* Figure out what kernel this is running */
kernelVersion = get_kernel_revision();
/* Figure out where the default console should be */ /* Figure out where the default console should be */
console_init(); console_init();

21
init/init_shared.c Normal file
View File

@ -0,0 +1,21 @@
#include <signal.h>
#include "busybox.h"
#include "init_shared.h"
extern int kill_init(int sig)
{
#ifdef CONFIG_FEATURE_INITRD
/* don't assume init's pid == 1 */
long *pid = find_pid_by_name("init");
if (!pid || *pid<=0) {
pid = find_pid_by_name("linuxrc");
if (!pid || *pid<=0)
bb_error_msg_and_die("no process killed");
}
return(kill(*pid, sig));
#else
return(kill(1, sig));
#endif
}

1
init/init_shared.h Normal file
View File

@ -0,0 +1 @@
extern int kill_init(int sig);

View File

@ -26,16 +26,5 @@
extern int poweroff_main(int argc, char **argv) extern int poweroff_main(int argc, char **argv)
{ {
#ifdef CONFIG_FEATURE_INITRD return kill_init(SIGUSR2);
/* don't assume init's pid == 1 */
long *pid = find_pid_by_name("init");
if (!pid || *pid<=0) {
pid = find_pid_by_name("linuxrc");
if (!pid || *pid<=0)
bb_error_msg_and_die("no process killed");
}
return(kill(*pid, SIGUSR2));
#else
return(kill(1, SIGUSR2));
#endif
} }

View File

@ -27,6 +27,8 @@
#include <getopt.h> #include <getopt.h>
#include "busybox.h" #include "busybox.h"
#include "init_shared.h"
#if (__GNU_LIBRARY__ > 5) || defined(__dietlibc__) #if (__GNU_LIBRARY__ > 5) || defined(__dietlibc__)
#include <sys/reboot.h> #include <sys/reboot.h>
@ -42,23 +44,11 @@ static const int RB_AUTOBOOT = 0x01234567;
extern int reboot_main(int argc, char **argv) extern int reboot_main(int argc, char **argv)
{ {
int delay = 0; /* delay in seconds before rebooting */ char *delay; /* delay in seconds before rebooting */
int rc;
while ((rc = getopt(argc, argv, "d:")) > 0) { if(bb_getopt_ulflags(argc, argv, "d:", &delay)) {
switch (rc) { sleep(atoi(delay));
case 'd':
delay = atoi(optarg);
break;
default:
bb_show_usage();
break;
} }
}
if(delay > 0)
sleep(delay);
#ifdef CONFIG_USER_INIT #ifdef CONFIG_USER_INIT
/* Don't kill ourself */ /* Don't kill ourself */
@ -83,29 +73,11 @@ extern int reboot_main(int argc, char **argv)
sleep(1); sleep(1);
sync(); sync();
if (kernelVersion > 0 && kernelVersion <= KERNEL_VERSION(2,2,11)) {
/* bdflush, kupdate not needed for kernels >2.2.11 */
bdflush(1, 0);
sync();
}
init_reboot(RB_AUTOBOOT); init_reboot(RB_AUTOBOOT);
exit(0); /* Shrug */ return 0; /* Shrug */
#else #else
#ifdef CONFIG_FEATURE_INITRD return kill_init(SIGTERM);
{
/* don't assume init's pid == 1 */
long *pid = find_pid_by_name("init");
if (!pid || *pid<=0)
pid = find_pid_by_name("linuxrc");
if (!pid || *pid<=0)
bb_error_msg_and_die("no process killed");
fflush(stdout);
return(kill(*pid, SIGTERM));
}
#else
return(kill(1, SIGTERM));
#endif
#endif #endif
} }