X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvserver-stat.c;h=a444d9976054d442dcb23536367563782219f720;hb=775dc2bae5da1fa8ca7d1eead70e9c294ee7a23e;hp=43e15f372b6594819b55102d452fba3bf9bd9df7;hpb=fb4b7203c3030ded334c6641455a117da306f68d;p=util-vserver.git diff --git a/src/vserver-stat.c b/src/vserver-stat.c index 43e15f3..a444d99 100644 --- a/src/vserver-stat.c +++ b/src/vserver-stat.c @@ -308,7 +308,7 @@ registerXidCgroups(struct Vector *vec, struct process_info *process) int cpu; char vhi_name[65], filename[128], - cgroup[65], + cgroup[129], buf[30]; int fd; ssize_t cgroup_len; @@ -341,10 +341,33 @@ registerXidCgroups(struct Vector *vec, struct process_info *process) perror("read(cgroup/mnt)"); return; } + if (cgroup_len > 0) { + close(fd); + while (cgroup[cgroup_len - 1] == '\n' || cgroup[cgroup_len - 1] == '\r') + cgroup_len--; + cgroup[cgroup_len] = '/'; + cgroup_len += 1; + cgroup[cgroup_len] = 0; + } + } + + if ((fd = open(DEFAULTCONFDIR "/cgroup/base", O_RDONLY)) != -1) { + len = read(fd, cgroup + cgroup_len, sizeof(cgroup) - cgroup_len); + if (len == -1) { + perror("read(cgroup/base)"); + return; + } close(fd); - cgroup[cgroup_len] = '/'; - cgroup_len += 1; - cgroup[cgroup_len] = 0; + if (len > 0) { + while (cgroup[cgroup_len + len - 1] == '\n' || cgroup[cgroup_len + len - 1] == '\r') + len--; + cgroup_len += len; + if (cgroup[cgroup_len - 1] != '/') { + cgroup[cgroup_len] = '/'; + cgroup_len += 1; + } + cgroup[cgroup_len] = 0; + } } len = strlen(vhi_name);