This way it can be used in install.c in subsequent commit.
"Automount\0"
"Install\0",
- .no_instances = true,
-
.init = automount_init,
.load = automount_load,
.done = automount_done,
"Install\0",
.private_section = "BusName",
- .no_instances = true,
-
.init = busname_init,
.done = busname_done,
.load = busname_load,
"Device\0"
"Install\0",
- .no_instances = true,
-
.init = device_init,
.done = device_done,
.load = unit_load_fragment_and_dropin_optional,
"Install\0",
.private_section = "Mount",
- .no_instances = true,
-
.init = mount_init,
.load = mount_load,
.done = mount_done,
"Install\0",
.private_section = "Scope",
- .no_instances = true,
.can_transient = true,
.init = scope_init,
"Install\0",
.private_section = "Slice",
- .no_instances = true,
.can_transient = true,
.init = slice_init,
"Install\0",
.private_section = "Swap",
- .no_instances = true,
-
.init = swap_init,
.load = swap_load,
.done = swap_done,
if (r < 0)
return r;
- if (i && unit_vtable[t]->no_instances)
+ if (i && !unit_type_may_template(t))
return -EINVAL;
/* Ensure that this unit is either instanced or not instanced,
/* The strings to print in status messages */
UnitStatusMessageFormats status_message_formats;
- /* Instances make no sense for this type */
- bool no_instances:1;
-
/* True if transient units of this type are OK */
bool can_transient:1;
};
UNIT_PATH);
}
+bool unit_type_may_template(UnitType type) {
+ return IN_SET(type,
+ UNIT_SERVICE,
+ UNIT_SOCKET,
+ UNIT_TARGET,
+ UNIT_TIMER,
+ UNIT_PATH);
+}
+
static int in_search_path(const LookupPaths *p, const char *path) {
_cleanup_free_ char *parent = NULL;
char **i;
}
bool unit_type_may_alias(UnitType type) _const_;
+bool unit_type_may_template(UnitType type) _const_;
int unit_file_enable(
UnitFileScope scope,