X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fcgroup-show.c;h=2f2669f828acbc8274e4f4bb7caeceebaadffda9;hb=9f26c90cb50c45d4549c4dd569917b4ac143b94d;hp=69fe7fc96db4ceba6a5860d655557b443896a33c;hpb=c339d9775d1df19fdbbafc57486f7cd51af6b7fb;p=elogind.git diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c index 69fe7fc96..2f2669f82 100644 --- a/src/shared/cgroup-show.c +++ b/src/shared/cgroup-show.c @@ -51,7 +51,7 @@ static unsigned ilog10(unsigned long ul) { return n; } -static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsigned n_columns, bool extra, bool more, bool kernel_threads) { +static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsigned n_columns, bool extra, bool more, bool kernel_threads, OutputFlags flags) { unsigned i, m, pid_width; pid_t biggest = 0; @@ -76,20 +76,23 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi /* And sort */ qsort(pids, n_pids, sizeof(pid_t), compare); - if (n_columns > pid_width+2) - n_columns -= pid_width+2; - else - n_columns = 20; - + if(flags & OUTPUT_FULL_WIDTH) + n_columns = 0; + else { + if (n_columns > pid_width+2) + n_columns -= pid_width+2; + else + n_columns = 20; + } for (i = 0; i < n_pids; i++) { char *t = NULL; get_process_cmdline(pids[i], n_columns, true, &t); - printf("%s%s %*lu %s\n", + printf("%s%s%*lu %s\n", prefix, draw_special_char(extra ? DRAW_TRIANGULAR_BULLET : - ((more || i < n_pids-1) ? DRAW_BOX_VERT_AND_RIGHT : DRAW_BOX_UP_AND_RIGHT)), + ((more || i < n_pids-1) ? DRAW_TREE_BRANCH : DRAW_TREE_RIGHT)), pid_width, (unsigned long) pids[i], strna(t)); @@ -99,7 +102,7 @@ static void show_pid_array(int pids[], unsigned n_pids, const char *prefix, unsi } -static int show_cgroup_one_by_path(const char *path, const char *prefix, unsigned n_columns, bool more, bool kernel_threads) { +static int show_cgroup_one_by_path(const char *path, const char *prefix, unsigned n_columns, bool more, bool kernel_threads, OutputFlags flags) { char *fn; FILE *f; size_t n = 0, n_allocated = 0; @@ -149,7 +152,7 @@ static int show_cgroup_one_by_path(const char *path, const char *prefix, unsigne goto finish; if (n > 0) - show_pid_array(pids, n, prefix, n_columns, false, more, kernel_threads); + show_pid_array(pids, n, prefix, n_columns, false, more, kernel_threads, flags); r = 0; @@ -162,7 +165,7 @@ finish: return r; } -int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, bool all) { +int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, OutputFlags flags) { DIR *d; char *last = NULL; char *p1 = NULL, *p2 = NULL, *fn = NULL, *gn = NULL; @@ -197,22 +200,22 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns goto finish; } - if (!all && cg_is_empty_recursive(NULL, k, false) > 0) { + if (!(flags & OUTPUT_SHOW_ALL) && cg_is_empty_recursive(NULL, k, false) > 0) { free(k); continue; } if (!shown_pids) { - show_cgroup_one_by_path(path, prefix, n_columns, true, kernel_threads); + show_cgroup_one_by_path(path, prefix, n_columns, true, kernel_threads, flags); shown_pids = true; } if (last) { - printf("%s%s %s\n", prefix, draw_special_char(DRAW_BOX_VERT_AND_RIGHT), - path_get_file_name(last)); + printf("%s%s%s\n", prefix, draw_special_char(DRAW_TREE_BRANCH), + path_get_file_name(last)); if (!p1) { - p1 = strjoin(prefix, draw_special_char(DRAW_BOX_VERT), " ", NULL); + p1 = strappend(prefix, draw_special_char(DRAW_TREE_VERT)); if (!p1) { free(k); r = -ENOMEM; @@ -220,7 +223,7 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns } } - show_cgroup_by_path(last, p1, n_columns-2, kernel_threads, all); + show_cgroup_by_path(last, p1, n_columns-2, kernel_threads, flags); free(last); } @@ -231,11 +234,11 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns goto finish; if (!shown_pids) - show_cgroup_one_by_path(path, prefix, n_columns, !!last, kernel_threads); + show_cgroup_one_by_path(path, prefix, n_columns, !!last, kernel_threads, flags); if (last) { - printf("%s%s %s\n", prefix, draw_special_char(DRAW_BOX_UP_AND_RIGHT), - path_get_file_name(last)); + printf("%s%s%s\n", prefix, draw_special_char(DRAW_TREE_RIGHT), + path_get_file_name(last)); if (!p2) { p2 = strappend(prefix, " "); @@ -245,7 +248,7 @@ int show_cgroup_by_path(const char *path, const char *prefix, unsigned n_columns } } - show_cgroup_by_path(last, p2, n_columns-2, kernel_threads, all); + show_cgroup_by_path(last, p2, n_columns-2, kernel_threads, flags); } r = 0; @@ -261,7 +264,7 @@ finish: return r; } -int show_cgroup(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, bool all) { +int show_cgroup(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, OutputFlags flags) { char *p; int r; @@ -272,13 +275,13 @@ int show_cgroup(const char *controller, const char *path, const char *prefix, un if (r < 0) return r; - r = show_cgroup_by_path(p, prefix, n_columns, kernel_threads, all); + r = show_cgroup_by_path(p, prefix, n_columns, kernel_threads, flags); free(p); return r; } -static int show_extra_pids(const char *controller, const char *path, const char *prefix, unsigned n_columns, const pid_t pids[], unsigned n_pids) { +static int show_extra_pids(const char *controller, const char *path, const char *prefix, unsigned n_columns, const pid_t pids[], unsigned n_pids, OutputFlags flags) { pid_t *copy; unsigned i, j; int r; @@ -314,28 +317,28 @@ static int show_extra_pids(const char *controller, const char *path, const char copy[j++] = pids[i]; } - show_pid_array(copy, j, prefix, n_columns, true, false, false); + show_pid_array(copy, j, prefix, n_columns, true, false, false, flags); free(copy); return 0; } -int show_cgroup_and_extra(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, bool all, const pid_t extra_pids[], unsigned n_extra_pids) { +int show_cgroup_and_extra(const char *controller, const char *path, const char *prefix, unsigned n_columns, bool kernel_threads, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags) { int r; assert(controller); assert(path); - r = show_cgroup(controller, path, prefix, n_columns, kernel_threads, all); + r = show_cgroup(controller, path, prefix, n_columns, kernel_threads, flags); if (r < 0) return r; - return show_extra_pids(controller, path, prefix, n_columns, extra_pids, n_extra_pids); + return show_extra_pids(controller, path, prefix, n_columns, extra_pids, n_extra_pids, flags); } -int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, bool kernel_threads, bool all, const pid_t extra_pids[], unsigned n_extra_pids) { +int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned n_columns, bool kernel_threads, const pid_t extra_pids[], unsigned n_extra_pids, OutputFlags flags) { int r; - char *controller, *path; + _cleanup_free_ char *controller = NULL, *path = NULL; assert(spec); @@ -343,9 +346,5 @@ int show_cgroup_and_extra_by_spec(const char *spec, const char *prefix, unsigned if (r < 0) return r; - r = show_cgroup_and_extra(controller, path, prefix, n_columns, kernel_threads, all, extra_pids, n_extra_pids); - free(controller); - free(path); - - return r; + return show_cgroup_and_extra(controller, path, prefix, n_columns, kernel_threads, extra_pids, n_extra_pids, flags); }