diff options
Diffstat (limited to 'servicecmd/list.c')
-rw-r--r-- | servicecmd/list.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/servicecmd/list.c b/servicecmd/list.c new file mode 100644 index 0000000..2286197 --- /dev/null +++ b/servicecmd/list.c @@ -0,0 +1,71 @@ +#include "servicecmd.h" +#include "service.h" +#include "config.h" + +static int cmd_list(int argc, char **argv) +{ + int i, ret = EXIT_SUCCESS; + service_list_t list; + service_t *svc; + + (void)argc; (void)argv; + + if (srvscan(SVCDIR, &list)) { + fprintf(stderr, "Error while reading services from %s\n", + SVCDIR); + ret = EXIT_FAILURE; + } + + for (i = 0; i < TGT_MAX; ++i) { + if (list.targets[i] == NULL) + continue; + + fputs("******** target: ", stdout); + + switch (i) { + case TGT_BOOT: + fputs("boot", stdout); + break; + case TGT_SHUTDOWN: + fputs("shutdown", stdout); + break; + case TGT_REBOOT: + fputs("reboot", stdout); + break; + case TGT_CAD: + fputs("ctrl-alt-delete", stdout); + break; + } + + fputs(" ********\n", stdout); + + for (svc = list.targets[i]; svc != NULL; svc = svc->next) { + fprintf(stdout, "Name: %s\n", svc->name); + fprintf(stdout, "Descrption: %s\n", svc->desc); + + fputs("Type: ", stdout); + switch (svc->type) { + case SVC_ONCE: fputs("once\n", stdout); break; + case SVC_WAIT: fputs("wait\n", stdout); break; + case SVC_RESPAWN: fputs("respawn\n", stdout); break; + } + + fputc('\n', stdout); + } + + fputc('\n', stdout); + } + + del_srv_list(&list); + return ret; +} + +static command_t list = { + .cmd = "list", + .usage = "", + .s_desc = "print a list of currently enabled services", + .l_desc = "Print a list of currently enabled services.", + .run_cmd = cmd_list, +}; + +REGISTER_COMMAND(list) |