From 0301abf48ed3be921c33d409c73b554435cf6378 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 27 Jan 2010 00:15:56 +0100 Subject: implement drop-in directories --- manager.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'manager.c') diff --git a/manager.c b/manager.c index 819164ca2d..682c7e7f26 100644 --- a/manager.c +++ b/manager.c @@ -830,16 +830,19 @@ static void dispatch_load_queue(Manager *m) { m->dispatching_load_queue = false; } -int manager_load_unit(Manager *m, const char *name, Unit **_ret) { +int manager_load_unit(Manager *m, const char *path, Unit **_ret) { Unit *ret; int r; + const char *name; assert(m); - assert(name); + assert(path); assert(_ret); /* This will load the service information files, but not actually - * start any services or anything */ + * start any services or anything. */ + + name = file_name_from_path(path); if ((ret = manager_get_unit(m, name))) { *_ret = ret; @@ -849,6 +852,13 @@ int manager_load_unit(Manager *m, const char *name, Unit **_ret) { if (!(ret = unit_new(m))) return -ENOMEM; + if (is_path(path)) { + if (!(ret->meta.load_path = strdup(path))) { + unit_free(ret); + return -ENOMEM; + } + } + if ((r = unit_add_name(ret, name)) < 0) { unit_free(ret); return r; -- cgit v1.2.3-54-g00ecf