"0123456789" \
"abcdefghijklmnopqrstuvwxyz" \
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
- "-_"
+ "-_.\\"
bool unit_name_is_valid(const char *n) {
UnitType t;
return 0;
}
-/* FIXME: Does not rollback on failure! */
+/* FIXME: Does not rollback on failure! Needs to fix special unit
+ * pointers. Needs to merge names and dependencies properly.*/
int unit_merge(Unit *u, Unit *other) {
int r;
UnitDependency d;
/* Common implementation for multiple backends */
int unit_load_fragment_and_dropin(Unit *u) {
- int r;
+ int r, ret;
assert(u);
if ((r = unit_load_fragment(u)) < 0)
return r;
+ ret = r > 0;
+
/* Load drop-in directory data */
if ((r = unit_load_dropin(u)) < 0)
return r;
- return 0;
+ return ret;
}
int unit_load(Unit *u) {
return 0;
}
+int unit_add_dependency_by_name(Unit *u, UnitDependency d, const char *name) {
+ Unit *other;
+ int r;
+
+ if ((r = manager_load_unit(u->meta.manager, name, &other)) < 0)
+ return r;
+
+ if ((r = unit_add_dependency(u, d, other)) < 0)
+ return r;
+
+ return 0;
+}
+
const char *unit_path(void) {
char *e;
return 0;
}
+
+char *unit_name_escape_path(const char *path, const char *suffix) {
+ char *r, *t;
+ const char *f;
+ size_t a, b;
+
+ assert(path);
+ assert(suffix);
+
+ /* Takes a path and a util suffix and makes a nice unit name
+ * of it, escaping all weird chars on the way.
+ *
+ * / becomes _, and all chars not alloweed in a unit name get
+ * escaped as \xFF, including the _ and the \ itself, of
+ * course. This escaping is hence reversible.
+ */
+
+ a = strlen(path);
+ b = strlen(suffix);
+
+ if (!(r = new(char, a*4+b+1)))
+ return NULL;
+
+ for (f = path, t = r; *f; f++) {
+ if (*f == '/')
+ *(t++) = '_';
+ else if (*f == '_' || *f == '\\' || !strchr(VALID_CHARS, *f)) {
+ *(t++) = '\\';
+ *(t++) = 'x';
+ *(t++) = hexchar(*f > 4);
+ *(t++) = hexchar(*f);
+ } else
+ *(t++) = *f;
+ }
+
+ memcpy(t, suffix, b+1);
+
+ return r;
+}