+ char *p;
+
+ if (asprintf(&p, "%s\t", prefix) >= 0)
+ prefix = p;
+ else
+ p = NULL;
+
+ job_dump(n->meta.job, f, prefix);
+ free(p);
+ }
+}
+
+static int verify_type(Name *name) {
+ char *n;
+ void *state;
+
+ assert(name);
+
+ /* Checks that all aliases of this name have the same and valid type */
+
+ SET_FOREACH(n, name->meta.names, state) {
+ NameType t;
+
+ if ((t = name_type_from_string(n)) == _NAME_TYPE_INVALID)
+ return -EINVAL;
+
+ if (name->meta.type == _NAME_TYPE_INVALID) {
+ name->meta.type = t;
+ continue;
+ }
+
+ if (name->meta.type != t)
+ return -EINVAL;
+ }
+
+ if (name->meta.type == _NAME_TYPE_INVALID)
+ return -EINVAL;
+
+ return 0;
+}
+
+static int service_load_sysv(Service *s) {
+ assert(s);
+
+ /* Load service data from SysV init scripts, preferably with
+ * LSB headers ... */
+
+ return -ENOENT;
+}
+
+static int name_load_fstab(Name *n) {
+ assert(n);
+ assert(n->meta.type == NAME_MOUNT || n->meta.type == NAME_AUTOMOUNT);
+
+ /* Load mount data from /etc/fstab */
+
+ return 0;
+}
+
+static int snapshot_load(Snapshot *s) {
+ assert(s);
+
+ /* Load snapshots from disk */
+
+ return 0;
+}
+
+static int name_load_dropin(Name *n) {
+ assert(n);
+
+ /* Load dependencies from drop-in directories */
+
+ return 0;
+}
+
+int name_load(Name *name) {
+ int r;
+
+ assert(name);
+
+ if (name->meta.state != NAME_STUB)
+ return 0;
+
+ if ((r = verify_type(name)) < 0)
+ return r;
+
+ if (name->meta.type == NAME_SERVICE) {
+
+ /* Load a .service file */
+ if ((r = name_load_fragment(name)) == 0)
+ goto finish;
+
+ /* Load a classic init script */
+ if (r == -ENOENT)
+ if ((r = service_load_sysv(SERVICE(name))) == 0)
+ goto finish;
+
+ } else if (name->meta.type == NAME_MOUNT ||
+ name->meta.type == NAME_AUTOMOUNT) {
+
+ if ((r = name_load_fstab(name)) == 0)
+ goto finish;
+
+ } else if (name->meta.type == NAME_SNAPSHOT) {
+
+ if ((r = snapshot_load(SNAPSHOT(name))) == 0)
+ goto finish;
+
+ } else {
+ if ((r = name_load_fragment(name)) == 0)
+ goto finish;