+static int instance_unit_from_cgroup(char **cgroup){
+ char *at;
+
+ assert(cgroup);
+
+ at = memchr(*cgroup, '@', strlen(*cgroup));
+ if (at && at[1] == '.') {
+ char *i, *s;
+
+ /* This is a templated service */
+ i = memchr(at, '/', strlen(at));
+ if(!i)
+ return -EIO;
+
+ s = strndup(at + 1, i - at);
+ if (!s)
+ return -ENOMEM;
+
+ i = strdup(i + 1);
+ if (!i) {
+ free(s);
+ return -ENOMEM;
+ }
+
+ strcpy(at + 1, i);
+ strcpy(at + strlen(i) + 1, s);
+ at[strlen(at) - 1] = '\0';
+
+ free(i);
+ free(s);
+ }
+
+ return 0;
+}
+
+static int cgroup_to_unit(char *cgroup, char **unit){