[CRIU] [PATCH 3/3] libcriu: Add criu_add_cg_root() call

Pavel Emelyanov xemul at parallels.com
Fri Aug 22 05:12:05 PDT 2014


Signed-off-by: Pavel Emelyanov <xemul at parallels.com>

---

diff --git a/lib/criu.c b/lib/criu.c
index 45006e2..c83c4d8 100644
--- a/lib/criu.c
+++ b/lib/criu.c
@@ -232,6 +232,46 @@ er:
 	return -ENOMEM;
 }
 
+int criu_add_cg_root(char *ctrl, char *path)
+{
+	int nr;
+	CgroupRoot **a, *root;
+
+	root = malloc(sizeof(*root));
+	if (!root)
+		goto er;
+	cgroup_root__init(root);
+
+	if (ctrl) {
+		root->ctrl = strdup(ctrl);
+		if (!root->ctrl)
+			goto er_r;
+	}
+
+	root->path = strdup(path);
+	if (!root->path)
+		goto er_c;
+
+	nr = opts->n_cg_root + 1;
+	a = realloc(opts->cg_root, nr * sizeof(root));
+	if (!a)
+		goto er_p;
+
+	a[nr - 1] = root;
+	opts->cg_root = a;
+	opts->n_cg_root = nr;
+	return 0;
+
+er_p:
+	free(root->path);
+er_c:
+	if (root->ctrl)
+		free(root->ctrl);
+er_r:
+	free(root);
+er:
+	return -ENOMEM;
+}
 int criu_add_veth_pair(char *in, char *out)
 {
 	int nr;
diff --git a/lib/criu.h b/lib/criu.h
index 94c5979..18f911e 100644
--- a/lib/criu.h
+++ b/lib/criu.h
@@ -51,6 +51,7 @@ void criu_set_manage_cgroups(bool manage);
 int criu_set_exec_cmd(int argc, char *argv[]);
 int criu_add_ext_mount(char *key, char *val);
 int criu_add_veth_pair(char *in, char *out);
+int criu_add_cg_root(char *ctrl, char *path);
 
 /*
  * The criu_notify_arg_t na argument is an opaque



More information about the CRIU mailing list