* Authors: Jan Safranek <jsafrane@redhat.com>
*/
+#include "tools-common.h"
+
#include <libcgroup.h>
#include <libcgroup-internal.h>
-#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <errno.h>
#include <unistd.h>
#include <getopt.h>
+#include <stdio.h>
+#include <errno.h>
-#include "tools-common.h"
-
-static struct option const long_options[] =
-{
- {"recursive", no_argument, NULL, 'r'},
- {"help", no_argument, NULL, 'h'},
- {"group", required_argument, NULL, 'g'},
+static const struct option long_options[] = {
+ {"recursive", no_argument, NULL, 'r'},
+ {"help", no_argument, NULL, 'h'},
+ {"group", required_argument, NULL, 'g'},
{NULL, 0, NULL, 0}
};
static void usage(int status, const char *program_name)
{
if (status != 0) {
- fprintf(stderr, "Wrong input parameters,"
- " try %s --help' for more information.\n",
+ fprintf(stderr, "Wrong input parameters,");
+ fprintf(stderr, " try %s --help' for more information.\n",
program_name);
return;
}
+
printf("Usage: %s [-h] [-r] [[-g] <controllers>:<path>] ...\n",
program_name);
printf("Remove control group(s)\n");
- printf(" -g <controllers>:<path> Control group to be removed "\
- "(-g is optional)\n");
+ printf(" -g <controllers>:<path> Control group to be removed ");
+ printf("(-g is optional)\n");
printf(" -h, --help Display this help\n");
- printf(" -r, --recursive Recursively remove "\
- "all subgroups\n");
+ printf(" -r, --recursive Recursively remove ");
+ printf("all subgroups\n");
}
/*
* cgroup and hierarchy number is same
*/
static int skip_add_controller(int counter, int *skip,
- struct ext_cgroup_record *ecg_list)
+ struct ext_cgroup_record *ecg_list)
{
- int k;
struct controller_data info;
void *handle;
int ret = 0;
+ int k;
/* find out hierarchy number of added cgroup */
ecg_list[counter].h_number = 0;
+
ret = cgroup_get_all_controller_begin(&handle, &info);
while (ret == 0) {
if (!strcmp(info.name, ecg_list[counter].name)) {
*skip = 0;
for (k = 0; k < counter; k++) {
if ((!strcmp(ecg_list[k].name, ecg_list[counter].name)) &&
- (ecg_list[k].h_number == ecg_list[counter].h_number)) {
+ (ecg_list[k].h_number == ecg_list[counter].h_number)) {
/* we found a control group in the same hierarchy */
if (strcmp(ecg_list[k].controller,
- ecg_list[counter].controller)) {
+ ecg_list[counter].controller)) {
/*
* it is a different controller ->
* if there is not one cgroup for the same
int main(int argc, char *argv[])
{
- int ret = 0;
- int i, j;
- int c;
- int flags = 0;
- int final_ret = 0;
+ struct cgroup_group_spec **cgroup_list = NULL;
+ struct ext_cgroup_record *ecg_list = NULL;
+ struct cgroup_controller *cgc;
+ struct cgroup *cgroup;
+ int final_ret = 0;
int counter = 0;
+ int flags = 0;
int max = 0;
- struct ext_cgroup_record *ecg_list = NULL;
+ int ret = 0;
+ int i, j, c;
int skip;
- struct cgroup_group_spec **cgroup_list = NULL;
- struct cgroup *cgroup;
- struct cgroup_controller *cgc;
-
/* initialize libcg */
ret = cgroup_init();
if (ret) {
- fprintf(stderr, "%s: "
- "libcgroup initialization failed: %s\n",
+ fprintf(stderr, "%s: libcgroup initialization failed: %s\n",
argv[0], cgroup_strerror(ret));
goto err;
}
goto err;
}
- /*
- * Parse arguments
- */
+ /* Parse arguments */
while ((c = getopt_long(argc, argv, "rhg:",
long_options, NULL)) > 0) {
switch (c) {
case 'g':
ret = parse_cgroup_spec(cgroup_list, optarg, argc);
if (ret != 0) {
- fprintf(stderr,
- "%s: error parsing cgroup '%s'\n",
- argv[0], optarg);
+ fprintf(stderr, "%s: error parsing ", argv[0]);
+ fprintf(stderr, "cgroup '%s'\n", optarg);
ret = -1;
goto err;
}
ret = parse_cgroup_spec(cgroup_list, argv[i], argc);
if (ret != 0) {
fprintf(stderr, "%s: error parsing cgroup '%s'\n",
- argv[0], argv[i]);
+ argv[0], argv[i]);
ret = -1;
goto err;
}
max = max + argc;
ecg_list = (struct ext_cgroup_record *)
realloc(ecg_list,
- max * sizeof(struct ext_cgroup_record));
+ max * sizeof(struct ext_cgroup_record));
if (!ecg_list) {
fprintf(stderr, "%s: ", argv[0]);
fprintf(stderr, "not enough memory\n");
strncpy(ecg_list[counter].controller,
cgroup_list[i]->controllers[j], FILENAME_MAX);
+
ecg_list[counter].controller[FILENAME_MAX - 1] = '\0';
+
strncpy(ecg_list[counter].name,
cgroup_list[i]->path, FILENAME_MAX);
+
ecg_list[counter].name[FILENAME_MAX - 1] = '\0';
ret = skip_add_controller(counter, &skip, ecg_list);
}
cgc = cgroup_add_controller(cgroup,
- cgroup_list[i]->controllers[j]);
+ cgroup_list[i]->controllers[j]);
if (!cgc) {
ret = ECGFAIL;
- fprintf(stderr, "%s: "
- "controller %s can't be added\n",
- argv[0],
+ fprintf(stderr, "%s: ", argv[0]);
+ fprintf(stderr, "controller %s can't be added\n",
cgroup_list[i]->controllers[j]);
cgroup_free(&cgroup);
goto err;
}
ret = cgroup_delete_cgroup_ext(cgroup, flags);
- /*
- * Remember the errors and continue, try to remove all groups.
- */
+ /* Remember the errors and continue, try to remove all groups. */
if (ret != 0) {
fprintf(stderr, "%s: cannot remove group '%s': %s\n",
- argv[0], cgroup->name,
- cgroup_strerror(ret));
+ argv[0], cgroup->name, cgroup_strerror(ret));
final_ret = ret;
}
cgroup_free(&cgroup);
}
ret = final_ret;
+
err:
if (ecg_list)
free(ecg_list);
}
free(cgroup_list);
}
+
return ret;
}