mirror of
https://github.com/AuxXxilium/eudev.git
synced 2025-02-24 20:53:14 +07:00
unit: simplify things a little by introducing API to add two dependencies in one step
This commit is contained in:
parent
c5da34ef1b
commit
2c966c038d
@ -125,10 +125,7 @@ int automount_add_one_mount_link(Automount *a, Mount *m) {
|
||||
if (path_equal(a->where, m->where))
|
||||
return 0;
|
||||
|
||||
if ((r = unit_add_dependency(UNIT(m), UNIT_BEFORE, UNIT(a), true)) < 0)
|
||||
return r;
|
||||
|
||||
if ((r = unit_add_dependency(UNIT(a), UNIT_REQUIRES, UNIT(m), true)) < 0)
|
||||
if ((r = unit_add_two_dependencies(UNIT(a), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true)) < 0)
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
|
@ -262,11 +262,7 @@ static int mount_add_target_links(Mount *m) {
|
||||
if ((r = unit_load_related_unit(UNIT(m), ".automount", &am)) < 0)
|
||||
return r;
|
||||
|
||||
if ((r = unit_add_dependency(tu, UNIT_WANTS, UNIT(am), true)) < 0)
|
||||
return r;
|
||||
|
||||
return unit_add_dependency(UNIT(am), UNIT_BEFORE, tu, true);
|
||||
|
||||
return unit_add_two_dependencies(tu, UNIT_AFTER, UNIT_WANTS, UNIT(am), true);
|
||||
} else {
|
||||
|
||||
if (!noauto && handle)
|
||||
|
@ -65,10 +65,7 @@ int path_add_one_mount_link(Path *p, Mount *m) {
|
||||
if (!path_startswith(s->path, m->where))
|
||||
continue;
|
||||
|
||||
if ((r = unit_add_dependency(UNIT(m), UNIT_BEFORE, UNIT(p), true)) < 0)
|
||||
return r;
|
||||
|
||||
if ((r = unit_add_dependency(UNIT(p), UNIT_REQUIRES, UNIT(m), true)) < 0)
|
||||
if ((r = unit_add_two_dependencies(UNIT(p), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true)) < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -543,10 +543,8 @@ static int service_load_sysv_path(Service *s, const char *path) {
|
||||
|
||||
if (unit_name_to_type(m) == UNIT_SERVICE)
|
||||
r = unit_add_name(u, m);
|
||||
else {
|
||||
if ((r = unit_add_dependency_by_name_inverse(u, UNIT_REQUIRES, m, NULL, true)) >= 0)
|
||||
r = unit_add_dependency_by_name(u, UNIT_BEFORE, m, NULL, true);
|
||||
}
|
||||
else
|
||||
r = unit_add_two_dependencies_by_name_inverse(u, UNIT_AFTER, UNIT_REQUIRES, m, NULL, true);
|
||||
|
||||
free(m);
|
||||
|
||||
@ -2449,21 +2447,13 @@ static int service_enumerate(Manager *m) {
|
||||
service = unit_follow_merge(service);
|
||||
|
||||
if (de->d_name[0] == 'S') {
|
||||
Unit *runlevel_target;
|
||||
|
||||
if ((r = manager_load_unit(m, rcnd_table[i].target, NULL, &runlevel_target)) < 0)
|
||||
goto finish;
|
||||
|
||||
if ((r = unit_add_dependency(runlevel_target, UNIT_WANTS, service, true)) < 0)
|
||||
goto finish;
|
||||
|
||||
if ((r = unit_add_dependency(service, UNIT_BEFORE, runlevel_target, true)) < 0)
|
||||
if ((r = unit_add_two_dependencies_by_name_inverse(service, UNIT_AFTER, UNIT_WANTS, rcnd_table[i].target, NULL, true)) < 0)
|
||||
goto finish;
|
||||
|
||||
} else if (de->d_name[0] == 'K' &&
|
||||
(rcnd_table[i].type == RUNLEVEL_DOWN ||
|
||||
rcnd_table[i].type == RUNLEVEL_SYSINIT)) {
|
||||
Unit *shutdown_target;
|
||||
|
||||
/* We honour K links only for
|
||||
* halt/reboot. For the normal
|
||||
@ -2481,13 +2471,7 @@ static int service_enumerate(Manager *m) {
|
||||
* too to the shutdown
|
||||
* target.*/
|
||||
|
||||
if ((r = manager_load_unit(m, SPECIAL_SHUTDOWN_TARGET, NULL, &shutdown_target)) < 0)
|
||||
goto finish;
|
||||
|
||||
if ((r = unit_add_dependency(service, UNIT_CONFLICTS, shutdown_target, true)) < 0)
|
||||
goto finish;
|
||||
|
||||
if ((r = unit_add_dependency(service, UNIT_BEFORE, shutdown_target, true)) < 0)
|
||||
if ((r = unit_add_two_dependencies_by_name_inverse(service, UNIT_AFTER, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true)) < 0)
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
|
@ -204,10 +204,7 @@ int socket_add_one_mount_link(Socket *s, Mount *m) {
|
||||
if (!socket_needs_mount(s, m->where))
|
||||
return 0;
|
||||
|
||||
if ((r = unit_add_dependency(UNIT(m), UNIT_BEFORE, UNIT(s), true)) < 0)
|
||||
return r;
|
||||
|
||||
if ((r = unit_add_dependency(UNIT(s), UNIT_REQUIRES, UNIT(m), true)) < 0)
|
||||
if ((r = unit_add_two_dependencies(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true)) < 0)
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
|
@ -77,10 +77,7 @@ int swap_add_one_mount_link(Swap *s, Mount *m) {
|
||||
if (!path_startswith(s->what, m->where))
|
||||
return 0;
|
||||
|
||||
if ((r = unit_add_dependency(UNIT(m), UNIT_BEFORE, UNIT(s), true)) < 0)
|
||||
return r;
|
||||
|
||||
if ((r = unit_add_dependency(UNIT(s), UNIT_REQUIRES, UNIT(m), true)) < 0)
|
||||
if ((r = unit_add_two_dependencies(UNIT(s), UNIT_AFTER, UNIT_REQUIRES, UNIT(m), true)) < 0)
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
|
62
src/unit.c
62
src/unit.c
@ -1324,6 +1324,20 @@ fail:
|
||||
return r;
|
||||
}
|
||||
|
||||
int unit_add_two_dependencies(Unit *u, UnitDependency d, UnitDependency e, Unit *other, bool add_reference) {
|
||||
int r;
|
||||
|
||||
assert(u);
|
||||
|
||||
if ((r = unit_add_dependency(u, d, other, add_reference)) < 0)
|
||||
return r;
|
||||
|
||||
if ((r = unit_add_dependency(u, e, other, add_reference)) < 0)
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const char *resolve_template(Unit *u, const char *name, const char*path, char **p) {
|
||||
char *s;
|
||||
|
||||
@ -1378,6 +1392,27 @@ finish:
|
||||
return r;
|
||||
}
|
||||
|
||||
int unit_add_two_dependencies_by_name(Unit *u, UnitDependency d, UnitDependency e, const char *name, const char *path, bool add_reference) {
|
||||
Unit *other;
|
||||
int r;
|
||||
char *s;
|
||||
|
||||
assert(u);
|
||||
assert(name || path);
|
||||
|
||||
if (!(name = resolve_template(u, name, path, &s)))
|
||||
return -ENOMEM;
|
||||
|
||||
if ((r = manager_load_unit(u->meta.manager, name, path, &other)) < 0)
|
||||
goto finish;
|
||||
|
||||
r = unit_add_two_dependencies(u, d, e, other, add_reference);
|
||||
|
||||
finish:
|
||||
free(s);
|
||||
return r;
|
||||
}
|
||||
|
||||
int unit_add_dependency_by_name_inverse(Unit *u, UnitDependency d, const char *name, const char *path, bool add_reference) {
|
||||
Unit *other;
|
||||
int r;
|
||||
@ -1399,6 +1434,28 @@ finish:
|
||||
return r;
|
||||
}
|
||||
|
||||
int unit_add_two_dependencies_by_name_inverse(Unit *u, UnitDependency d, UnitDependency e, const char *name, const char *path, bool add_reference) {
|
||||
Unit *other;
|
||||
int r;
|
||||
char *s;
|
||||
|
||||
assert(u);
|
||||
assert(name || path);
|
||||
|
||||
if (!(name = resolve_template(u, name, path, &s)))
|
||||
return -ENOMEM;
|
||||
|
||||
if ((r = manager_load_unit(u->meta.manager, name, path, &other)) < 0)
|
||||
goto finish;
|
||||
|
||||
if ((r = unit_add_two_dependencies(other, d, e, u, add_reference)) < 0)
|
||||
goto finish;
|
||||
|
||||
finish:
|
||||
free(s);
|
||||
return r;
|
||||
}
|
||||
|
||||
int set_unit_path(const char *p) {
|
||||
char *cwd, *c;
|
||||
int r;
|
||||
@ -1907,10 +1964,7 @@ int unit_add_node_link(Unit *u, const char *what, bool wants) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if ((r = unit_add_dependency(u, UNIT_AFTER, device, true)) < 0)
|
||||
return r;
|
||||
|
||||
if ((r = unit_add_dependency(u, UNIT_REQUIRES, device, true)) < 0)
|
||||
if ((r = unit_add_two_dependencies(u, UNIT_AFTER, UNIT_REQUIRES, device, true)) < 0)
|
||||
return r;
|
||||
|
||||
if (wants)
|
||||
|
@ -367,8 +367,13 @@ void unit_free(Unit *u);
|
||||
int unit_add_name(Unit *u, const char *name);
|
||||
|
||||
int unit_add_dependency(Unit *u, UnitDependency d, Unit *other, bool add_reference);
|
||||
int unit_add_two_dependencies(Unit *u, UnitDependency d, UnitDependency e, Unit *other, bool add_reference);
|
||||
|
||||
int unit_add_dependency_by_name(Unit *u, UnitDependency d, const char *name, const char *filename, bool add_reference);
|
||||
int unit_add_two_dependencies_by_name(Unit *u, UnitDependency d, UnitDependency e, const char *name, const char *path, bool add_reference);
|
||||
|
||||
int unit_add_dependency_by_name_inverse(Unit *u, UnitDependency d, const char *name, const char *filename, bool add_reference);
|
||||
int unit_add_two_dependencies_by_name_inverse(Unit *u, UnitDependency d, UnitDependency e, const char *name, const char *path, bool add_reference);
|
||||
|
||||
int unit_add_exec_dependencies(Unit *u, ExecContext *c);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user