diff options
Diffstat (limited to 'src/rc/rc.c')
-rw-r--r-- | src/rc/rc.c | 138 |
1 files changed, 70 insertions, 68 deletions
diff --git a/src/rc/rc.c b/src/rc/rc.c index a3b17095..9a08546a 100644 --- a/src/rc/rc.c +++ b/src/rc/rc.c @@ -44,7 +44,7 @@ const char rc_copyright[] = "Copyright (c) 2007-2008 Roy Marples"; #include <sys/wait.h> #ifdef __linux__ -# include <asm/setup.h> /* for COMMAND_LINE_SIZE */ +# include <asm/setup.h> /* for COMMAND_LINE_SIZE */ #endif #include <errno.h> @@ -108,17 +108,17 @@ clean_failed(void) while ((d = readdir(dp))) { if (d->d_name[0] == '.' && (d->d_name[1] == '\0' || - (d->d_name[1] == '.' && d->d_name[2] == '\0'))) + (d->d_name[1] == '.' && d->d_name[2] == '\0'))) continue; l = strlen(RC_SVCDIR "/failed/") + - strlen(d->d_name) + 1; + strlen(d->d_name) + 1; path = xmalloc(sizeof(char) * l); snprintf(path, l, RC_SVCDIR "/failed/%s", d->d_name); if (path) { if (unlink(path)) eerror("%s: unlink `%s': %s", - applet, path, strerror(errno)); + applet, path, strerror(errno)); free(path); } } @@ -217,8 +217,8 @@ read_key(bool block) if (!isatty(fd)) return false; - /* Now save our terminal settings. We need to restore them at exit as we - * will be changing it for non-blocking reads for Interactive */ + /* Now save our terminal settings. We need to restore them at exit as + we will be changing it for non-blocking reads for Interactive */ if (!termios_orig) { termios_orig = xmalloc(sizeof(*termios_orig)); tcgetattr(fd, termios_orig); @@ -301,7 +301,7 @@ run_program(const char *prog) execl(prog, prog, (char *) NULL); eerror("%s: unable to exec `%s': %s", applet, prog, - strerror(errno)); + strerror(errno)); _exit(EXIT_FAILURE); } @@ -323,7 +323,7 @@ sulogin(bool cont) { execl("/sbin/halt", "/sbin/halt", "-f", (char *) NULL); eerrorx("%s: unable to exec `/sbin/halt': %s", - applet, strerror(errno)); + applet, strerror(errno)); } #endif if (!cont) { @@ -343,7 +343,7 @@ single_user(void) rc_logger_close(); execl(SHUTDOWN, SHUTDOWN, "now", (char *) NULL); eerrorx("%s: unable to exec `" SHUTDOWN "': %s", - applet, strerror(errno)); + applet, strerror(errno)); } static bool @@ -359,7 +359,7 @@ set_krunlevel(const char *level) if (exists(RC_KRUNLEVEL) && unlink(RC_KRUNLEVEL) != 0) eerror("unlink `%s': %s", RC_KRUNLEVEL, - strerror(errno)); + strerror(errno)); return false; } @@ -409,11 +409,11 @@ remove_pid(pid_t pid) RC_PID *p; LIST_FOREACH(p, &service_pids, entries) - if (p->pid == pid) { - LIST_REMOVE(p, entries); - free(p); - return; - } + if (p->pid == pid) { + LIST_REMOVE(p, entries); + free(p); + return; + } } static void @@ -484,7 +484,7 @@ handle_signal(int sig) /* Kill any running services we have started */ LIST_FOREACH(pi, &service_pids, entries) - kill(pi->pid, SIGTERM); + kill(pi->pid, SIGTERM); /* Notify plugins we are aborting */ rc_plugin_run(RC_HOOK_ABORT, NULL); @@ -514,15 +514,15 @@ do_sysinit() uname(&uts); printf("\n %sOpenRC %s" VERSION "%s is starting up %s", - ecolor(ECOLOR_GOOD), ecolor(ECOLOR_HILITE), - ecolor(ECOLOR_NORMAL), ecolor(ECOLOR_BRACKET)); + ecolor(ECOLOR_GOOD), ecolor(ECOLOR_HILITE), + ecolor(ECOLOR_NORMAL), ecolor(ECOLOR_BRACKET)); #ifdef BRANDING printf(BRANDING " (%s)", uts.machine); #else printf("%s %s (%s)", - uts.sysname, - uts.release, - uts.machine); + uts.sysname, + uts.release, + uts.machine); #endif if ((sys = rc_sys())) @@ -533,7 +533,7 @@ do_sysinit() if (!rc_yesno(getenv ("EINFO_QUIET")) && rc_conf_yesno("rc_interactive")) printf("Press %sI%s to enter interactive boot mode\n\n", - ecolor(ECOLOR_GOOD), ecolor(ECOLOR_NORMAL)); + ecolor(ECOLOR_GOOD), ecolor(ECOLOR_NORMAL)); setenv("RC_RUNLEVEL", RC_LEVEL_SYSINIT, 1); run_program(INITSH); @@ -611,13 +611,14 @@ do_stop_services(const char *newlevel, bool parallel) if (!svc1) { tmplist = rc_stringlist_new(); rc_stringlist_add(tmplist, service->value); - deporder = rc_deptree_depends(deptree, types_n, tmplist, - newlevel ? newlevel : runlevel, - RC_DEP_STRICT | RC_DEP_TRACE); + deporder = rc_deptree_depends(deptree, types_n, + tmplist, newlevel ? newlevel : runlevel, + RC_DEP_STRICT | RC_DEP_TRACE); rc_stringlist_free(tmplist); svc2 = NULL; TAILQ_FOREACH(svc1, deporder, entries) { - svc2 = rc_stringlist_find(start_services, svc1->value); + svc2 = rc_stringlist_find(start_services, + svc1->value); if (svc2) break; } @@ -661,21 +662,21 @@ do_start_services(bool parallel) interactive = want_interactive(); if (interactive) { -interactive_retry: + interactive_retry: printf("\n"); einfo("About to start the service %s", - service->value); + service->value); eindent(); einfo("1) Start the service\t\t2) Skip the service"); einfo("3) Continue boot process\t\t4) Exit to shell"); eoutdent(); -interactive_option: + interactive_option: switch (read_key(true)) { - case '1': break; - case '2': continue; - case '3': interactive = false; break; - case '4': sulogin(true); goto interactive_retry; - default: goto interactive_option; + case '1': break; + case '2': continue; + case '3': interactive = false; break; + case '4': sulogin(true); goto interactive_retry; + default: goto interactive_option; } } @@ -693,7 +694,7 @@ interactive_option: /* Store our interactive status for boot */ if (interactive && (strcmp(runlevel, RC_LEVEL_SYSINIT) == 0 || - strcmp(runlevel, getenv("RC_BOOTLEVEL")) == 0)) + strcmp(runlevel, getenv("RC_BOOTLEVEL")) == 0)) mark_interactive(); else { if (exists(INTERACTIVE)) @@ -711,17 +712,17 @@ handle_bad_signal(int sig) pid_t crashed_pid = getpid(); switch (fork()) { - case -1: - _exit(sig); - /* NOTREACHED */ - case 0: - sprintf(pid, "%i", crashed_pid); - printf("\nAuto launching gdb!\n\n"); - _exit(execlp("gdb", "gdb", "--quiet", "--pid", pid, - "-ex", "bt full", NULL)); - /* NOTREACHED */ - default: - wait(&status); + case -1: + _exit(sig); + /* NOTREACHED */ + case 0: + sprintf(pid, "%i", crashed_pid); + printf("\nAuto launching gdb!\n\n"); + _exit(execlp("gdb", "gdb", "--quiet", "--pid", pid, + "-ex", "bt full", NULL)); + /* NOTREACHED */ + default: + wait(&status); } _exit(1); /* NOTREACHED */ @@ -737,7 +738,8 @@ static const struct option longopts[] = { longopts_COMMON }; static const char * const longopts_help[] = { - "override the next runlevel to change into\nwhen leaving single user or boot runlevels", + "override the next runlevel to change into\n" + "when leaving single user or boot runlevels", "runs the service specified with the rest\nof the arguments", "output the RC system type, if any", longopts_help_COMMON @@ -783,9 +785,9 @@ main(int argc, char **argv) printf(" [%s]", bootlevel); printf(") " VERSION #ifdef BRANDING - " (" BRANDING ")" + " (" BRANDING ")" #endif - "\n"); + "\n"); exit(EXIT_SUCCESS); } @@ -806,7 +808,7 @@ main(int argc, char **argv) argc++; argv--; while ((opt = getopt_long(argc, argv, getoptstring, - longopts, (int *) 0)) != -1) + longopts, (int *) 0)) != -1) { switch (opt) { case 'o': @@ -825,7 +827,7 @@ main(int argc, char **argv) newlevel = rc_service_resolve(optarg); if (!newlevel) eerrorx("%s: service `%s' does not exist", - applet, optarg); + applet, optarg); argv += optind - 1; *argv = newlevel; execv(*argv, argv); @@ -837,8 +839,8 @@ main(int argc, char **argv) printf("%s\n", bootlevel); exit(EXIT_SUCCESS); /* NOTREACHED */ - case_RC_COMMON_GETOPT - } + case_RC_COMMON_GETOPT + } } newlevel = argv[optind++]; @@ -886,7 +888,7 @@ main(int argc, char **argv) if (newlevel && (strcmp(newlevel, RC_LEVEL_SHUTDOWN) == 0 || - strcmp(newlevel, RC_LEVEL_SINGLE) == 0)) + strcmp(newlevel, RC_LEVEL_SINGLE) == 0)) { going_down = true; if (!exists(RC_KRUNLEVEL)) @@ -895,10 +897,10 @@ main(int argc, char **argv) setenv("RC_RUNLEVEL", newlevel, 1); setenv("RC_GOINGDOWN", "YES", 1); } else { - /* We should not use krunevel in sysinit or the boot runlevel */ + /* We should not use krunevel in sysinit or boot runlevels */ if (!newlevel || (strcmp(newlevel, RC_LEVEL_SYSINIT) != 0 && - strcmp(newlevel, getenv("RC_BOOTLEVEL")) != 0)) + strcmp(newlevel, getenv("RC_BOOTLEVEL")) != 0)) { if (get_krunlevel(krunlevel, sizeof(krunlevel))) { newlevel = krunlevel; @@ -960,7 +962,7 @@ main(int argc, char **argv) if (errno == EACCES) eerrorx("%s: superuser access required", applet); eerrorx("%s: failed to create stopping dir `%s': %s", - applet, RC_STOPPING, strerror(errno)); + applet, RC_STOPPING, strerror(errno)); } /* Build a list of all services to stop and then work out the @@ -982,7 +984,7 @@ main(int argc, char **argv) if (stop_services) { tmplist = rc_deptree_depends(deptree, types_nua, stop_services, - runlevel, depoptions | RC_DEP_STOP); + runlevel, depoptions | RC_DEP_STOP); rc_stringlist_free(stop_services); stop_services = tmplist; } @@ -990,7 +992,7 @@ main(int argc, char **argv) /* Load our list of start services */ hotplugged_services = rc_services_in_state(RC_SERVICE_HOTPLUGGED); start_services = rc_services_in_runlevel(newlevel ? - newlevel : runlevel); + newlevel : runlevel); if (strcmp(newlevel ? newlevel : runlevel, RC_LEVEL_SHUTDOWN) != 0 && strcmp(newlevel ? newlevel : runlevel, RC_LEVEL_SYSINIT) != 0) { @@ -998,10 +1000,10 @@ main(int argc, char **argv) TAILQ_CONCAT(start_services, tmplist, entries); free(tmplist); if (strcmp(newlevel ? newlevel : runlevel, - RC_LEVEL_SINGLE) != 0) + RC_LEVEL_SINGLE) != 0) { if (strcmp(newlevel ? newlevel : runlevel, - bootlevel) != 0) + bootlevel) != 0) { tmplist = rc_services_in_runlevel(bootlevel); TAILQ_CONCAT(start_services, tmplist, entries); @@ -1009,9 +1011,9 @@ main(int argc, char **argv) } if (hotplugged_services) { TAILQ_FOREACH(service, hotplugged_services, - entries) - rc_stringlist_addu(start_services, - service->value); + entries) + rc_stringlist_addu(start_services, + service->value); } } } @@ -1027,7 +1029,7 @@ main(int argc, char **argv) /* Notify the plugins we have finished */ rc_plugin_run(RC_HOOK_RUNLEVEL_STOP_OUT, - going_down ? newlevel : runlevel); + going_down ? newlevel : runlevel); hook_out = 0; rmdir(RC_STOPPING); @@ -1054,14 +1056,14 @@ main(int argc, char **argv) /* Re-add our hotplugged services if they stopped */ if (hotplugged_services) TAILQ_FOREACH(service, hotplugged_services, entries) - rc_service_mark(service->value, RC_SERVICE_HOTPLUGGED); + rc_service_mark(service->value, RC_SERVICE_HOTPLUGGED); /* Order the services to start */ if (start_services) { rc_stringlist_sort(&start_services); deporder = rc_deptree_depends(deptree, types_nua, - start_services, runlevel, - depoptions | RC_DEP_START); + start_services, runlevel, + depoptions | RC_DEP_START); rc_stringlist_free(start_services); start_services = deporder; } |