mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-26 10:03:40 +03:00
core: move check whether a unit is suitable to become transient into unit.c
Lets introduce unit_is_pristine() that verifies whether a unit is suitable to become a transient unit, by checking that it is no referenced yet and has no data on disk assigned.
This commit is contained in:
parent
06cc6afa04
commit
0f13f3bd79
@ -663,19 +663,7 @@ static int transient_unit_from_message(
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* Check if the unit already exists or is already referenced,
|
||||
* in a number of different ways. Note that to cater for unit
|
||||
* types such as slice, we are generally fine with units that
|
||||
* are marked UNIT_LOADED even even though nothing was
|
||||
* actually loaded, as those unit types don't require a file
|
||||
* on disk to validly load. */
|
||||
|
||||
if (!IN_SET(u->load_state, UNIT_NOT_FOUND, UNIT_LOADED) ||
|
||||
u->fragment_path ||
|
||||
u->source_path ||
|
||||
!strv_isempty(u->dropin_paths) ||
|
||||
u->refs ||
|
||||
set_size(u->dependencies[UNIT_REFERENCED_BY]) > 0)
|
||||
if (!unit_is_pristine(u))
|
||||
return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit %s already exists.", name);
|
||||
|
||||
/* OK, the unit failed to load and is unreferenced, now let's
|
||||
|
@ -3704,3 +3704,23 @@ int unit_fail_if_symlink(Unit *u, const char* where) {
|
||||
|
||||
return -ELOOP;
|
||||
}
|
||||
|
||||
bool unit_is_pristine(Unit *u) {
|
||||
assert(u);
|
||||
|
||||
/* Check if the unit already exists or is already referenced,
|
||||
* in a number of different ways. Note that to cater for unit
|
||||
* types such as slice, we are generally fine with units that
|
||||
* are marked UNIT_LOADED even even though nothing was
|
||||
* actually loaded, as those unit types don't require a file
|
||||
* on disk to validly load. */
|
||||
|
||||
return !(!IN_SET(u->load_state, UNIT_NOT_FOUND, UNIT_LOADED) ||
|
||||
u->fragment_path ||
|
||||
u->source_path ||
|
||||
!strv_isempty(u->dropin_paths) ||
|
||||
u->refs ||
|
||||
set_size(u->dependencies[UNIT_REFERENCED_BY]) > 0 ||
|
||||
u->job ||
|
||||
u->merged_into);
|
||||
}
|
||||
|
@ -586,6 +586,8 @@ int unit_require_mounts_for(Unit *u, const char *path);
|
||||
|
||||
bool unit_type_supported(UnitType t);
|
||||
|
||||
bool unit_is_pristine(Unit *u);
|
||||
|
||||
static inline bool unit_supported(Unit *u) {
|
||||
return unit_type_supported(u->type);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user