diff options
-rw-r--r-- | src/tools/cgclassify.c | 4 | ||||
-rw-r--r-- | src/tools/cgcreate.c | 4 | ||||
-rw-r--r-- | src/tools/cgdelete.c | 2 | ||||
-rw-r--r-- | src/tools/cgexec.c | 4 | ||||
-rw-r--r-- | src/tools/lscgroup.c | 4 | ||||
-rw-r--r-- | src/tools/tools-common.c | 9 | ||||
-rw-r--r-- | src/tools/tools-common.h | 6 |
7 files changed, 22 insertions, 11 deletions
diff --git a/src/tools/cgclassify.c b/src/tools/cgclassify.c index 74d5bec..b2d6f18 100644 --- a/src/tools/cgclassify.c +++ b/src/tools/cgclassify.c @@ -118,7 +118,9 @@ int main(int argc, char *argv[]) while ((c = getopt_long(argc, argv, "+g:s", longopts, NULL)) > 0) { switch (c) { case 'g': - if (parse_cgroup_spec(cgroup_list, optarg)) { + ret = parse_cgroup_spec(cgroup_list, optarg, + CG_HIER_MAX); + if (ret) { fprintf(stderr, "cgroup controller and path" "parsing failed\n"); return -1; diff --git a/src/tools/cgcreate.c b/src/tools/cgcreate.c index 78665e7..dc8305c 100644 --- a/src/tools/cgcreate.c +++ b/src/tools/cgcreate.c @@ -113,7 +113,9 @@ int main(int argc, char *argv[]) } break; case 'g': - if (parse_cgroup_spec(cgroup_list, optarg)) { + ret = parse_cgroup_spec(cgroup_list, optarg, + CG_HIER_MAX); + if (ret) { fprintf(stderr, "%s: " "cgroup controller and path" "parsing failed (%s)\n", diff --git a/src/tools/cgdelete.c b/src/tools/cgdelete.c index 51d8922..260d2fc 100644 --- a/src/tools/cgdelete.c +++ b/src/tools/cgdelete.c @@ -82,7 +82,7 @@ int main(int argc, char *argv[]) /* parse groups on command line */ for (i = optind; i < argc; i++) { - ret = parse_cgroup_spec(cgroup_list, argv[i]); + ret = parse_cgroup_spec(cgroup_list, argv[i], CG_HIER_MAX); if (ret != 0) { fprintf(stderr, "%s: error parsing cgroup '%s'\n", argv[0], argv[i]); diff --git a/src/tools/cgexec.c b/src/tools/cgexec.c index a036870..2c92964 100644 --- a/src/tools/cgexec.c +++ b/src/tools/cgexec.c @@ -59,7 +59,9 @@ int main(int argc, char *argv[]) while ((c = getopt_long(argc, argv, "+g:s", longopts, NULL)) > 0) { switch (c) { case 'g': - if (parse_cgroup_spec(cgroup_list, optarg)) { + ret = parse_cgroup_spec(cgroup_list, optarg, + CG_HIER_MAX); + if (ret) { fprintf(stderr, "cgroup controller and path" "parsing failed\n"); return -1; diff --git a/src/tools/lscgroup.c b/src/tools/lscgroup.c index 5164d35..ca846e0 100644 --- a/src/tools/lscgroup.c +++ b/src/tools/lscgroup.c @@ -280,7 +280,9 @@ int main(int argc, char *argv[]) /* read the list of controllers */ while (optind < argc) { - if (parse_cgroup_spec(cgroup_list, argv[optind])) { + ret = parse_cgroup_spec(cgroup_list, optarg, + CG_HIER_MAX); + if (ret) { fprintf(stderr, "%s: cgroup controller" " and path parsing failed (%s)\n", argv[0], argv[optind]); diff --git a/src/tools/tools-common.c b/src/tools/tools-common.c index db46f6e..4beffcd 100644 --- a/src/tools/tools-common.c +++ b/src/tools/tools-common.c @@ -22,7 +22,8 @@ #include <libcgroup.h> #include "tools-common.h" -int parse_cgroup_spec(struct cgroup_group_spec *cdptr[], char *optarg) +int parse_cgroup_spec(struct cgroup_group_spec **cdptr, char *optarg, + int capacity) { struct cgroup_group_spec *ptr; int i, j; @@ -31,15 +32,15 @@ int parse_cgroup_spec(struct cgroup_group_spec *cdptr[], char *optarg) ptr = *cdptr; /* Find first free entry inside the cgroup data array */ - for (i = 0; i < CG_HIER_MAX; i++, ptr++) { + for (i = 0; i < capacity; i++, ptr++) { if (!cdptr[i]) break; } - if (i == CG_HIER_MAX) { + if (i == capacity) { /* No free slot found */ fprintf(stderr, "Max allowed hierarchies %d reached\n", - CG_HIER_MAX); + capacity); return -1; } diff --git a/src/tools/tools-common.h b/src/tools/tools-common.h index 65d87c7..752eb57 100644 --- a/src/tools/tools-common.h +++ b/src/tools/tools-common.h @@ -41,14 +41,16 @@ struct cgroup_group_spec { * The option must have form of 'controller1,controller2,..:group_name'. * * The parsed list of controllers and group name is added at the end of - * provided cdptr. + * provided cdptr, i.e. on place of first NULL cgroup_group_spec*. * * @param cdptr Target data structure to fill. New item is allocated and added * at the end. * @param optarg Argument to parse. + * @param capacity Capacity of the cdptr array. * @return 0 on success, != 0 on error. */ -int parse_cgroup_spec(struct cgroup_group_spec *cdptr[], char *optarg); +int parse_cgroup_spec(struct cgroup_group_spec **cdptr, char *optarg, + int capacity); /** * Free a single cgroup_group_spec structure. |