*/
struct cgroup_controller;
+/**
+ * Uninitialized file/directory permissions used for task/control files.
+ */
+#define NO_PERMS (-1U)
/**
* Allocate new cgroup structure. This function itself does not create new
memset(newblk + oldlen, 0, (MAX_CGROUPS - oldlen) *
sizeof(struct cgroup));
+ init_cgroup_table(newblk + oldlen, MAX_CGROUPS - oldlen);
config_cgroup_table = newblk;
cgroup_dbg("MAX_CGROUPS %d\n", MAX_CGROUPS);
cgroup_dbg("reallocated config_cgroup_table to %p\n", config_cgroup_table);
}
config_cgroup_table = calloc(MAX_CGROUPS, sizeof(struct cgroup));
+ if (!config_cgroup_table)
+ return ECGFAIL;
+
+ init_cgroup_table(config_cgroup_table, MAX_CGROUPS);
+
if (yyparse() != 0) {
cgroup_dbg("Failed to parse file %s\n", pathname);
fclose(yyin);
int index;
uid_t tasks_uid;
gid_t tasks_gid;
+ mode_t task_fperm;
uid_t control_uid;
gid_t control_gid;
+ mode_t control_fperm;
+ mode_t control_dperm;
};
struct cg_mount_point {
int cg_mkdir_p(const char *path);
struct cgroup *create_cgroup_from_name_value_pairs(const char *name,
struct control_value *name_value, int nv_number);
+void init_cgroup_table(struct cgroup *cgroups, size_t count);
/*
* Main mounting structures
#include <string.h>
#include <unistd.h>
+static void init_cgroup(struct cgroup *cgroup)
+{
+ cgroup->task_fperm = cgroup->control_fperm = cgroup->control_dperm = NO_PERMS;
+}
+
+void init_cgroup_table(struct cgroup *cgroups, size_t count)
+{
+ size_t i;
+
+ for (i = 0; i < count; ++i)
+ init_cgroup(&cgroups[i]);
+}
+
struct cgroup *cgroup_new_cgroup(const char *name)
{
struct cgroup *cgroup = calloc(1, sizeof(struct cgroup));
-
if (!cgroup)
return NULL;
+ init_cgroup(cgroup);
strncpy(cgroup->name, name, sizeof(cgroup->name));
return cgroup;