static void init_cgroup(struct cgroup *cgroup)
{
- cgroup->task_fperm = cgroup->control_fperm =
- cgroup->control_dperm = NO_PERMS;
- cgroup->control_gid = cgroup->control_uid = cgroup->tasks_gid =
- cgroup->tasks_uid = NO_UID_GID;
+ cgroup->task_fperm = NO_PERMS;
+ cgroup->control_fperm = NO_PERMS;
+ cgroup->control_dperm = NO_PERMS;
+
+ cgroup->control_gid = NO_UID_GID;
+ cgroup->control_uid = NO_UID_GID;
+ cgroup->tasks_gid = NO_UID_GID;
+ cgroup->tasks_uid = NO_UID_GID;
}
void init_cgroup_table(struct cgroup *cgroups, size_t count)
return cgroup;
}
-struct cgroup_controller *cgroup_add_controller(struct cgroup *cgroup,
- const char *name)
+struct cgroup_controller *cgroup_add_controller(struct cgroup *cgroup, const char *name)
{
struct cgroup_controller *controller;
int i, ret;
if (!cgroup)
return NULL;
- /*
- * Still not sure how to handle the failure here.
- */
+ /* Still not sure how to handle the failure here. */
if (cgroup->index >= CG_CONTROLLER_MAX)
return NULL;
- /*
- * Still not sure how to handle the failure here.
- */
+ /* Still not sure how to handle the failure here. */
for (i = 0; i < cgroup->index; i++) {
- if (strncmp(name, cgroup->controller[i]->name,
- sizeof(cgroup->controller[i]->name)) == 0)
+ if (strncmp(name, cgroup->controller[i]->name, CONTROL_NAMELEN_MAX) == 0)
return NULL;
}
controller = calloc(1, sizeof(struct cgroup_controller));
-
if (!controller)
return NULL;
if (strcmp(controller->name, CGROUP_FILE_PREFIX) == 0) {
/*
- * Operating on the "cgroup" controller is only allowed on
- * cgroup v2 systems
+ * Operating on the "cgroup" controller is only allowed
+ * on cgroup v2 systems
*/
controller->version = CGROUP_V2;
} else {
- ret = cgroup_get_controller_version(controller->name,
- &controller->version);
+ ret = cgroup_get_controller_version(controller->name, &controller->version);
if (ret) {
cgroup_dbg("failed to get cgroup version for controller %s\n",
controller->name);
/* go through the controller list */
ret = cgroup_get_all_controller_begin(&handle, &info);
if ((ret != 0) && (ret != ECGEOF)) {
- fprintf(stderr, "cannot read controller data: %s\n",
- cgroup_strerror(ret));
+ fprintf(stderr, "cannot read controller data: %s\n", cgroup_strerror(ret));
return ret;
}
while (ret == 0) {
if (info.hierarchy == 0) {
/*
- * the controller is not attached to any hierarchy
- * skip it.
+ * the controller is not attached to any
+ * hierarchy skip it.
*/
goto next;
}
cgc = cgroup_add_controller(cgroup, info.name);
if (!cgc) {
ret = ECGINVAL;
- fprintf(stderr, "controller %s can't be added\n",
- info.name);
+ fprintf(stderr, "controller %s can't be added\n", info.name);
goto end;
}
end:
cgroup_get_all_controller_end(&handle);
-
if (ret == ECGEOF)
ret = 0;
-
if (ret)
- fprintf(stderr,
- "cgroup_get_controller_begin/next failed (%s)\n",
+ fprintf(stderr, "cgroup_get_controller_begin/next failed (%s)\n",
cgroup_strerror(ret));
return ret;
{
struct cgroup *cg = *cgroup;
- /*
- * Passing NULL pointers is OK. We just return.
- */
+ /* Passing NULL pointers is OK. We just return. */
if (!cg)
return;
*cgroup = NULL;
}
-int cgroup_add_value_string(struct cgroup_controller *controller,
- const char *name, const char *value)
+int cgroup_add_value_string(struct cgroup_controller *controller, const char *name,
+ const char *value)
{
int i;
struct control_value *cntl_value;
}
cntl_value = calloc(1, sizeof(struct control_value));
-
if (!cntl_value)
return ECGCONTROLLERCREATEFAILED;
if (value) {
if (strlen(value) >= sizeof(cntl_value->value)) {
- fprintf(stderr,
- "value exceeds the maximum of %ld characters\n",
+ fprintf(stderr, "value exceeds the maximum of %ld characters\n",
sizeof(cntl_value->value) - 1);
free(cntl_value);
return ECGCONFIGPARSEFAIL;
return 0;
}
-int cgroup_add_value_int64(struct cgroup_controller *controller,
- const char *name, int64_t value)
+int cgroup_add_value_int64(struct cgroup_controller *controller, const char *name, int64_t value)
{
char *val;
int ret;
return ret;
}
-int cgroup_add_value_uint64(struct cgroup_controller *controller,
- const char *name, u_int64_t value)
+int cgroup_add_value_uint64(struct cgroup_controller *controller, const char *name,
+ u_int64_t value)
{
char *val;
int ret;
return ret;
}
-int cgroup_add_value_bool(struct cgroup_controller *controller,
- const char *name, bool value)
+int cgroup_add_value_bool(struct cgroup_controller *controller, const char *name, bool value)
{
char *val;
int ret;
return ret;
}
-int cgroup_remove_value(struct cgroup_controller * const controller,
- const char * const name)
+int cgroup_remove_value(struct cgroup_controller * const controller, const char * const name)
{
int i;
cgroup_free_value(controller->values[i]);
if (i == (controller->index - 1)) {
- /* This is the last entry in the table.
- * There's nothing to move
- */
+ /* This is the last entry in the table. There's nothing to move */
controller->index--;
} else {
- memmove(&controller->values[i],
- &controller->values[i + 1],
- sizeof(struct control_value *) *
- (controller->index - i - 1));
+ memmove(&controller->values[i], &controller->values[i + 1],
+ sizeof(struct control_value *) * (controller->index - i - 1));
controller->index--;
}
-
return 0;
}
}
return ECGROUPNOTEXIST;
}
-int cgroup_compare_controllers(struct cgroup_controller *cgca,
- struct cgroup_controller *cgcb)
+int cgroup_compare_controllers(struct cgroup_controller *cgca, struct cgroup_controller *cgcb)
{
int i;
if (strcmp(cva->value, cvb->value))
return ECGCONTROLLERNOTEQUAL;
}
+
return 0;
}
return 0;
}
-int cgroup_set_uid_gid(struct cgroup *cgroup, uid_t tasks_uid, gid_t tasks_gid,
- uid_t control_uid, gid_t control_gid)
+int cgroup_set_uid_gid(struct cgroup *cgroup, uid_t tasks_uid, gid_t tasks_gid, uid_t control_uid,
+ gid_t control_gid)
{
if (!cgroup)
return ECGINVAL;
return 0;
}
-int cgroup_get_uid_gid(struct cgroup *cgroup, uid_t *tasks_uid,
- gid_t *tasks_gid, uid_t *control_uid, gid_t *control_gid)
+int cgroup_get_uid_gid(struct cgroup *cgroup, uid_t *tasks_uid, gid_t *tasks_gid,
+ uid_t *control_uid, gid_t *control_gid)
{
if (!cgroup)
return ECGINVAL;
return 0;
}
-struct cgroup_controller *cgroup_get_controller(struct cgroup *cgroup,
- const char *name)
+struct cgroup_controller *cgroup_get_controller(struct cgroup *cgroup, const char *name)
{
int i;
struct cgroup_controller *cgc;
return NULL;
}
-int cgroup_get_value_string(struct cgroup_controller *controller,
- const char *name, char **value)
+int cgroup_get_value_string(struct cgroup_controller *controller, const char *name, char **value)
{
int i;
}
-int cgroup_set_value_string(struct cgroup_controller *controller,
- const char *name, const char *value)
+int cgroup_set_value_string(struct cgroup_controller *controller, const char *name,
+ const char *value)
{
int i;
return cgroup_add_value_string(controller, name, value);
}
-int cgroup_get_value_int64(struct cgroup_controller *controller,
- const char *name, int64_t *value)
+int cgroup_get_value_int64(struct cgroup_controller *controller, const char *name, int64_t *value)
{
int i;
struct control_value *val = controller->values[i];
if (!strcmp(val->name, name)) {
-
if (sscanf(val->value, "%" SCNd64, value) != 1)
return ECGINVAL;
return ECGROUPVALUENOTEXIST;
}
-int cgroup_set_value_int64(struct cgroup_controller *controller,
- const char *name, int64_t value)
+int cgroup_set_value_int64(struct cgroup_controller *controller, const char *name, int64_t value)
{
int ret;
int i;
struct control_value *val = controller->values[i];
if (!strcmp(val->name, name)) {
- ret = snprintf(val->value,
- sizeof(val->value), "%" PRId64, value);
-
+ ret = snprintf(val->value, sizeof(val->value), "%" PRId64, value);
if (ret >= sizeof(val->value))
return ECGINVAL;
return cgroup_add_value_int64(controller, name, value);
}
-int cgroup_get_value_uint64(struct cgroup_controller *controller,
- const char *name, u_int64_t *value)
+int cgroup_get_value_uint64(struct cgroup_controller *controller, const char *name,
+ u_int64_t *value)
{
int i;
return ECGROUPVALUENOTEXIST;
}
-int cgroup_set_value_uint64(struct cgroup_controller *controller,
- const char *name, u_int64_t value)
+int cgroup_set_value_uint64(struct cgroup_controller *controller, const char *name,
+ u_int64_t value)
{
int ret;
int i;
struct control_value *val = controller->values[i];
if (!strcmp(val->name, name)) {
- ret = snprintf(val->value, sizeof(val->value),
- "%" PRIu64, value);
-
+ ret = snprintf(val->value, sizeof(val->value), "%" PRIu64, value);
if (ret >= sizeof(val->value))
return ECGINVAL;
return cgroup_add_value_uint64(controller, name, value);
}
-int cgroup_get_value_bool(struct cgroup_controller *controller,
- const char *name, bool *value)
+int cgroup_get_value_bool(struct cgroup_controller *controller, const char *name, bool *value)
{
int i;
return 0;
}
}
+
return ECGROUPVALUENOTEXIST;
}
-int cgroup_set_value_bool(struct cgroup_controller *controller,
- const char *name, bool value)
+int cgroup_set_value_bool(struct cgroup_controller *controller, const char *name, bool value)
{
int ret;
int i;
struct control_value *val = controller->values[i];
if (!strcmp(val->name, name)) {
- if (value) {
- ret = snprintf(val->value,
- sizeof(val->value), "1");
- } else {
- ret = snprintf(val->value,
- sizeof(val->value), "0");
- }
+ if (value)
+ ret = snprintf(val->value, sizeof(val->value), "1");
+ else
+ ret = snprintf(val->value, sizeof(val->value), "0");
if (ret >= sizeof(val->value))
return ECGINVAL;
}
struct cgroup *create_cgroup_from_name_value_pairs(const char *name,
- struct control_value *name_value, int nv_number)
+ struct control_value *name_value, int nv_number)
{
struct cgroup_controller *cgc;
struct cgroup *src_cgroup;
/* create source cgroup */
src_cgroup = cgroup_new_cgroup(name);
if (!src_cgroup) {
- fprintf(stderr, "can't create cgroup: %s\n",
- cgroup_strerror(ECGFAIL));
+ fprintf(stderr, "can't create cgroup: %s\n", cgroup_strerror(ECGFAIL));
goto scgroup_err;
}
- /*
- * add pairs name-value to
- * relevant controllers of this cgroup.
- */
+ /* Add pairs name-value to relevant controllers of this cgroup. */
for (i = 0; i < nv_number; i++) {
if ((strchr(name_value[i].name, '.')) == NULL) {
- fprintf(stderr, "wrong -r parameter (%s=%s)\n",
- name_value[i].name, name_value[i].value);
+ fprintf(stderr, "wrong -r parameter (%s=%s)\n", name_value[i].name,
+ name_value[i].value);
goto scgroup_err;
}
/* add relevant controller */
cgc = cgroup_add_controller(src_cgroup, con);
if (!cgc) {
- fprintf(stderr, "controller %s can't be add\n",
- con);
+ fprintf(stderr, "controller %s can't be add\n", con);
goto scgroup_err;
}
}
/* add name-value pair to this controller */
- ret = cgroup_add_value_string(cgc,
- name_value[i].name, name_value[i].value);
+ ret = cgroup_add_value_string(cgc, name_value[i].name, name_value[i].value);
if (ret) {
- fprintf(stderr, "name-value pair %s=%s can't be set\n",
- name_value[i].name, name_value[i].value);
+ fprintf(stderr, "name-value pair %s=%s can't be set\n", name_value[i].name,
+ name_value[i].value);
goto scgroup_err;
}
}
return src_cgroup;
+
scgroup_err:
cgroup_free(&src_cgroup);
+
return NULL;
}