From 0aedc0286040b595119b4523d38ffd35b0018d6c Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Mon, 3 Mar 2008 10:33:42 +0000 Subject: Introduce LOCAL_PREFIX for a user maintained script location. --- src/librc/librc-depend.c | 6 ++++++ src/librc/librc.c | 26 ++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) (limited to 'src/librc') 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 @@ -701,6 +701,12 @@ bool rc_deptree_update_needed (void) #endif #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); } -- cgit v1.2.3