initctl: check for kexec_loaded when reboot is requested through initctl

This commit is contained in:
Frederic Crozat 2011-08-22 14:58:50 +02:00 committed by Lennart Poettering
parent 240fc26e03
commit 65457142f1
4 changed files with 16 additions and 12 deletions

View file

@ -93,6 +93,8 @@ static const char *translate_runlevel(int runlevel, bool *isolate) {
for (i = 0; i < ELEMENTSOF(table); i++)
if (table[i].runlevel == runlevel) {
*isolate = table[i].isolate;
if (runlevel == '6' && kexec_loaded())
return SPECIAL_KEXEC_TARGET;
return table[i].special;
}

View file

@ -4427,18 +4427,6 @@ static int parse_time_spec(const char *t, usec_t *_u) {
return 0;
}
static bool kexec_loaded(void) {
bool loaded = false;
char *s;
if (read_one_line_file("/sys/kernel/kexec_loaded", &s) >= 0) {
if (s[0] == '1')
loaded = true;
free(s);
}
return loaded;
}
static int shutdown_parse_argv(int argc, char *argv[]) {
enum {

View file

@ -5852,3 +5852,15 @@ static const char *const signal_table[] = {
};
DEFINE_STRING_TABLE_LOOKUP(signal, int);
bool kexec_loaded(void) {
bool loaded = false;
char *s;
if (read_one_line_file("/sys/kernel/kexec_loaded", &s) >= 0) {
if (s[0] == '1')
loaded = true;
free(s);
}
return loaded;
}

View file

@ -504,4 +504,6 @@ int signal_from_string_try_harder(const char *s);
extern int saved_argc;
extern char **saved_argv;
bool kexec_loaded(void);
#endif