return f;
}
-static int pakfire_cgroup_enable_controller(Pakfire pakfire,
- const char* group, const char* controller) {
+static int pakfire_cgroup_fprintf(Pakfire pakfire,
+ const char* group, const char* file, const char* format, ...) {
int r;
+ va_list args;
- FILE* f = pakfire_cgroup_fopen(pakfire, group, "cgroup.subtree_control", "w");
+ FILE* f = pakfire_cgroup_fopen(pakfire, group, file, "w");
if (!f)
return 1;
-RETRY:
+ // Write to file
+ va_start(args, format);
+ r = vfprintf(f, format, args);
+ va_end(args);
+
+ fclose(f);
+
+ return r;
+}
+
+static int pakfire_cgroup_enable_controller(Pakfire pakfire,
+ const char* group, const char* controller) {
// Enable controller
- r = fprintf(f, "+%s", controller);
+ int r = pakfire_cgroup_fprintf(pakfire, group, "cgroup.subtree_control",
+ "+%s", controller);
// fprintf might set errno when there was a problem, although the write itself was ok
if (errno) {
- r = 1;
-
// The parent group does not seem to have this controller enabled
if (errno == ENOENT) {
char* parent = pakfire_cgroup_parent_name(group);
if (!parent)
- goto ERROR;
+ return 1;
// Try to enable this on the parent level
r = pakfire_cgroup_enable_controller(pakfire, parent, controller);
// If this failed, we fail
if (r)
- goto ERROR;
+ return r;
// Otherwise we try again
- goto RETRY;
+ return pakfire_cgroup_enable_controller(pakfire, group, controller);
}
}
- // Success
- r = 0;
-
-ERROR:
- fclose(f);
-
- return r;
+ return 0;
}
static int pakfire_cgroup_enable_controllers(Pakfire pakfire,
// Enable default controllers
r = pakfire_cgroup_enable_controllers(pakfire, group, cgroup_controllers);
- printf("r = %d\n", r);
if (r) {
pakfire_cgroup_destroy(pakfire, group);
return r;