diff options
Diffstat (limited to 'src/sysvinit.c')
-rw-r--r-- | src/sysvinit.c | 58 |
1 files changed, 40 insertions, 18 deletions
diff --git a/src/sysvinit.c b/src/sysvinit.c index 337b922..9e918c7 100644 --- a/src/sysvinit.c +++ b/src/sysvinit.c @@ -425,6 +425,33 @@ sysvinit_setenv (char const *data, int size) } } +int +sysvinit_set_runlevel (int newlevel) +{ + switch (newlevel) + { + case 'A': + case 'B': + case 'C': + sysvinit_demand (newlevel); + break; + + default: + if (newlevel == runlevel) + { + } + if (runlevel_index (newlevel) == -1) + return -1; + else + { + dfl_level = newlevel; + inittrans (); + } + } + return 0; +} + + char *init_fifo = INIT_FIFO; static void create_fifo (void); @@ -480,24 +507,7 @@ sysvinit_fifo_handler (int fd, void *data) break; default: - if (buf.req.runlevel != runlevel) - { - switch (buf.req.runlevel) - { - case 'A': - case 'B': - case 'C': - sysvinit_demand (buf.req.runlevel); - break; - - default: - if (runlevel_index (buf.req.runlevel) != -1) - { - dfl_level = buf.req.runlevel; - inittrans (); - } - } - } + sysvinit_set_runlevel (buf.req.runlevel); } break; @@ -1097,3 +1107,15 @@ powerfailcmd (int power_stat) sysvinit_runlevel_setup (mask, NULL); } + +void +sysvinit_report (struct json_value *obj) +{ + json_object_set_string (obj, "runlevel", "%c", runlevel); + json_object_set_string (obj, "prevlevel", "%c", prevlevel); + json_object_set_string (obj, "bootstate", "%s", + boot_state_name[boot_state]); + if (initdefault) + json_object_set_string (obj, "initdefault", "%c", + initdefault); +} |