From: Jan Safranek Date: Thu, 29 Oct 2009 14:47:52 +0000 (+0100) Subject: Remove the CG_HIER_MAX from tools-common X-Git-Tag: v0.35~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4efb9b682b6133a13044c1f70aa96de1fd64c36c;p=thirdparty%2Flibcgroup.git Remove the CG_HIER_MAX from tools-common Some libcgroup tools are limited to CG_HIER_MAX arguments. This hard limit is suitable only to some of the tools, namely cgdelete and cgcreate should not be limited to any particular numbers of groups to create/delete. This patches removes the hard limit from tools-common.c and puts it to the individual tools. Signed-off-by: Jan Safranek Signed-off-by: Dhaval Giani --- diff --git a/src/tools/cgclassify.c b/src/tools/cgclassify.c index 74d5bec5..b2d6f188 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 78665e74..dc8305c3 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 51d89221..260d2fc4 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 a0368703..2c929649 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 5164d353..ca846e07 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 db46f6e8..4beffcd3 100644 --- a/src/tools/tools-common.c +++ b/src/tools/tools-common.c @@ -22,7 +22,8 @@ #include #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 65d87c76..752eb57b 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.