char c;
int flags = 0;
int final_ret = 0;
+ int capacity = 0;
- struct cgroup_group_spec *cgroup_list[CG_HIER_MAX];
+ struct cgroup_group_spec **cgroup_list = NULL;
struct cgroup *cgroup;
struct cgroup_controller *cgc;
return -1;
}
- memset(cgroup_list, 0, sizeof(cgroup_list));
-
/*
* Parse arguments
*/
goto err;
}
+ capacity = argc - optind;
+ cgroup_list = calloc(capacity, sizeof(struct cgroup_group_spec *));
+ if (cgroup_list == NULL) {
+ fprintf(stderr, "%s: out of memory\n", argv[0]);
+ ret = -1;
+ goto err;
+ }
+
/* parse groups on command line */
for (i = optind; i < argc; i++) {
- ret = parse_cgroup_spec(cgroup_list, argv[i], CG_HIER_MAX);
+ ret = parse_cgroup_spec(cgroup_list, argv[i], capacity);
if (ret != 0) {
fprintf(stderr, "%s: error parsing cgroup '%s'\n",
argv[0], argv[i]);
}
/* for each cgroup to delete */
- for (i = 0; i < CG_HIER_MAX; i++) {
+ for (i = 0; i < capacity; i++) {
if (!cgroup_list[i])
break;
ret = final_ret;
err:
- for (i = 0; i < CG_HIER_MAX; i++) {
- if (cgroup_list[i])
- cgroup_free_group_spec(cgroup_list[i]);
+ if (cgroup_list) {
+ for (i = 0; i < capacity; i++) {
+ if (cgroup_list[i])
+ cgroup_free_group_spec(cgroup_list[i]);
+ }
+ free(cgroup_list);
}
return ret;
}