From: Lennart Poettering Date: Fri, 9 Feb 2018 15:51:03 +0000 (+0100) Subject: cgtop: correctly order root cgroup always to the top X-Git-Tag: v238~33^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9c6e3e1d3b9da444a16a7b484edf8be227f808e0;p=thirdparty%2Fsystemd.git cgtop: correctly order root cgroup always to the top Internally, we encode the root cgroup as empty string. However, path_compare() is allergic to comparing absolute and relative paths. Let's clean this up, by always uses "/" as path for the root cgroup when comparing. --- diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c index 1a73fb099df..c68b56568ba 100644 --- a/src/cgtop/cgtop.c +++ b/src/cgtop/cgtop.c @@ -506,6 +506,10 @@ static int refresh(const char *root, Hashmap *a, Hashmap *b, unsigned iteration) return 0; } +static const char *empty_to_slash(const char *p) { + return isempty(p) ? "/" : p; +} + static int group_compare(const void*a, const void *b) { const Group *x = *(Group**)a, *y = *(Group**)b; @@ -515,9 +519,9 @@ static int group_compare(const void*a, const void *b) { * recursive summing is off, since that is actually * not accumulative for all children. */ - if (path_startswith(y->path, x->path)) + if (path_startswith(empty_to_slash(y->path), empty_to_slash(x->path))) return -1; - if (path_startswith(x->path, y->path)) + if (path_startswith(empty_to_slash(x->path), empty_to_slash(y->path))) return 1; } @@ -666,7 +670,7 @@ static void display(Hashmap *a) { g = array[j]; - path = isempty(g->path) ? "/" : g->path; + path = empty_to_slash(g->path); ellipsized = ellipsize(path, path_columns, 33); printf("%-*s", path_columns, ellipsized ?: path);