sysv: properly handle Provides LSB header

This commit is contained in:
Lennart Poettering 2010-04-01 21:30:40 +02:00
parent dbd4655d89
commit bd77d0fccc
3 changed files with 22 additions and 2 deletions

View File

@ -370,7 +370,13 @@ static int service_load_sysv_path(Service *s, const char *path) {
if (r == 0)
continue;
r = unit_add_name(u, m);
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)) >= 0)
r = unit_add_dependency_by_name(u, UNIT_BEFORE, m);
}
free(m);
if (r < 0)
@ -568,7 +574,7 @@ static int service_init(Unit *u) {
return r;
}
/* Load a classic init script as a fallback, if we couldn*t find anything */
/* Load a classic init script as a fallback, if we couldn't find anything */
if (r == 0)
if ((r = service_load_sysv(s)) <= 0) {
service_done(u);

13
unit.c
View File

@ -978,6 +978,19 @@ int unit_add_dependency_by_name(Unit *u, UnitDependency d, const char *name) {
return 0;
}
int unit_add_dependency_by_name_inverse(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(other, d, u)) < 0)
return r;
return 0;
}
int set_unit_path(const char *p) {
char *cwd, *c;
int r;

1
unit.h
View File

@ -249,6 +249,7 @@ void unit_free(Unit *u);
int unit_add_name(Unit *u, const char *name);
int unit_add_dependency(Unit *u, UnitDependency d, Unit *other);
int unit_add_dependency_by_name(Unit *u, UnitDependency d, const char *name);
int unit_add_dependency_by_name_inverse(Unit *u, UnitDependency d, const char *name);
int unit_add_cgroup(Unit *u, CGroupBonding *b);
int unit_add_cgroup_from_text(Unit *u, const char *name);