X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcgls.c;h=aebf826c90aaca8f12da011ed9cd3b9b201dd4a6;hp=6f083015edee6f83cd38019254037d1c23a65188;hb=1968a360405e302d4d2c2abc03a3314f81375156;hpb=1f16b4a6c496288aa62dc2ac973f88ca6c801b5d diff --git a/src/cgls.c b/src/cgls.c index 6f083015e..aebf826c9 100644 --- a/src/cgls.c +++ b/src/cgls.c @@ -30,20 +30,29 @@ #include "cgroup-util.h" #include "log.h" #include "util.h" +#include "pager.h" + +static bool arg_no_pager = false; static void help(void) { printf("%s [OPTIONS...] [CGROUP...]\n\n" "Recursively show control group contents.\n\n" - " -h --help Show this help\n", + " -h --help Show this help\n" + " --no-pager Do not pipe output into a pager.\n", program_invocation_short_name); } static int parse_argv(int argc, char *argv[]) { + enum { + ARG_NO_PAGER = 0x100 + }; + static const struct option options[] = { - { "help", no_argument, NULL, 'h' }, - { NULL, 0, NULL, 0 } + { "help", no_argument, NULL, 'h' }, + { "no-pager", no_argument, NULL, ARG_NO_PAGER }, + { NULL, 0, NULL, 0 } }; int c; @@ -59,6 +68,10 @@ static int parse_argv(int argc, char *argv[]) { help(); return 0; + case ARG_NO_PAGER: + arg_no_pager = true; + break; + case '?': return -EINVAL; @@ -84,6 +97,9 @@ int main(int argc, char *argv[]) { goto finish; } + if (!arg_no_pager) + pager_open(); + if (optind < argc) { unsigned i; @@ -112,8 +128,12 @@ int main(int argc, char *argv[]) { if ((r = cg_get_by_pid(SYSTEMD_CGROUP_CONTROLLER, 1, &root)) < 0) t = "/"; - else - t = root; + else { + if (endswith(root, "/system")) + root[strlen(root)-7] = 0; + + t = root[0] ? root : "/"; + } r = show_cgroup(SYSTEMD_CGROUP_CONTROLLER, t, NULL, 0); free(root); @@ -128,6 +148,7 @@ int main(int argc, char *argv[]) { retval = EXIT_SUCCESS; finish: + pager_close(); return retval; }