aboutsummaryrefslogtreecommitdiff
path: root/src/librc
diff options
context:
space:
mode:
Diffstat (limited to 'src/librc')
-rw-r--r--src/librc/librc-depend.c6
-rw-r--r--src/librc/librc.c26
2 files changed, 28 insertions, 4 deletions
diff --git a/src/librc/librc-depend.c b/src/librc/librc-depend.c
index 1ab2b604..1718e22d 100644
--- a/src/librc/librc-depend.c
+++ b/src/librc/librc-depend.c
@@ -702,6 +702,12 @@ bool rc_deptree_update_needed (void)
#ifdef RC_PKG_CONFDIR
! rc_newer_than (RC_DEPTREE, RC_PKG_CONFDIR) ||
#endif
+#ifdef RC_LOCAL_INITDIR
+ ! rc_newer_than (RC_DEPTREE, RC_LOCAL_INITDIR) ||
+#endif
+#ifdef RC_LOCAL_CONFDIR
+ ! rc_newer_than (RC_DEPTREE, RC_LOCAL_CONFDIR) ||
+#endif
! rc_newer_than (RC_DEPTREE, "/etc/rc.conf"))
return (true);
diff --git a/src/librc/librc.c b/src/librc/librc.c
index d292e856..e023efbe 100644
--- a/src/librc/librc.c
+++ b/src/librc/librc.c
@@ -313,6 +313,7 @@ char *rc_service_resolve (const char *service)
if (service[0] == '/')
return (xstrdup (service));
+ /* First check started services */
file = rc_strcatpaths (RC_SVCDIR, "started", service, (char *) NULL);
if (lstat (file, &buf) || ! S_ISLNK (buf.st_mode)) {
free (file);
@@ -324,6 +325,14 @@ char *rc_service_resolve (const char *service)
}
memset (buffer, 0, sizeof (buffer));
+
+ /* Nope, so lets see if the user has written it */
+#ifdef RC_LOCAL_INITDIR
+ snprintf (buffer, sizeof (buffer), RC_LOCAL_INITDIR "/%s", service);
+ if (stat (buffer, &buf) == 0)
+ return (xstrdup (buffer));
+#endif
+
if (file) {
r = readlink (file, buffer, sizeof (buffer));
free (file);
@@ -332,7 +341,7 @@ char *rc_service_resolve (const char *service)
}
snprintf (buffer, sizeof (buffer), RC_INITDIR "/%s", service);
- /* So we don't exist in /etc/init.d - check /usr/local/etc/init.d */
+ /* So we don't exist in /etc/init.d - check RC_PKG_INITDIR */
#ifdef RC_PKG_INITDIR
if (stat (buffer, &buf) != 0) {
snprintf (buffer, sizeof (buffer), RC_PKG_INITDIR "/%s", service);
@@ -787,19 +796,28 @@ char **rc_services_in_runlevel (const char *runlevel)
char **list = NULL;
if (! runlevel) {
-#ifdef RC_PKG_INITDIR
+#if defined(RC_PKG_INITDIR) || defined(RC_LOCAL_INITDIR)
int i;
- char **local = ls_dir (RC_PKG_INITDIR, LS_INITD);
+#endif
+#ifdef RC_PKG_INITDIR
+ char **pkg = ls_dir (RC_PKG_INITDIR, LS_INITD);
+#endif
+#ifdef RC_LOCAL_INITDIR
+ char **local = ls_dir (RC_LOCAL_INITDIR, LS_INITD);
#endif
list = ls_dir (RC_INITDIR, LS_INITD);
#ifdef RC_PKG_INITDIR
+ STRLIST_FOREACH (pkg, dir, i)
+ rc_strlist_addsortu (&list, dir);
+ rc_strlist_free (pkg);
+#endif
+#ifdef RC_LOCAL_DIR
STRLIST_FOREACH (local, dir, i)
rc_strlist_addsortu (&list, dir);
rc_strlist_free (local);
#endif
-
return (list);
}