parent
6fc02f2a45
commit
c547ba4ab0
@ -0,0 +1,80 @@ |
||||
From 03a2bc70e4260ec9f669391c47b9a7a9ecd0b75d Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <03a2bc70e4260ec9f669391c47b9a7a9ecd0b75d.1407329621.git.mschiffer@universe-factory.net>
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Wed, 6 Aug 2014 14:51:49 +0200
|
||||
Subject: [PATCH] Add support for alternative rc.d directories
|
||||
|
||||
---
|
||||
initd/preinit.c | 38 ++++++++++++++++++++++++++++++++++++++
|
||||
rcS.c | 2 +-
|
||||
2 files changed, 39 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/initd/preinit.c
|
||||
+++ b/initd/preinit.c
|
||||
@@ -87,12 +87,42 @@ fail:
|
||||
free(command);
|
||||
}
|
||||
|
||||
+static char*
|
||||
+get_rc_d(void)
|
||||
+{
|
||||
+ size_t n = 0;
|
||||
+ ssize_t len;
|
||||
+ char *ret = NULL;
|
||||
+
|
||||
+ FILE *fp = fopen("/tmp/rc_d_path", "r");
|
||||
+
|
||||
+ if (!fp)
|
||||
+ return NULL;
|
||||
+
|
||||
+ len = getline(&ret, &n, fp);
|
||||
+
|
||||
+ fclose(fp);
|
||||
+
|
||||
+ unlink("/tmp/rc_d_path");
|
||||
+
|
||||
+ if (len <= 0) {
|
||||
+ free(ret);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (ret[len-1] == '\n')
|
||||
+ ret[len-1] = 0;
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
spawn_procd(struct uloop_process *proc, int ret)
|
||||
{
|
||||
char *wdt_fd = watchdog_fd();
|
||||
char *argv[] = { "/sbin/procd", NULL};
|
||||
char dbg[2];
|
||||
+ char *rc_d_path;
|
||||
|
||||
if (plugd_proc.pid > 0)
|
||||
kill(plugd_proc.pid, SIGKILL);
|
||||
@@ -112,6 +142,12 @@ spawn_procd(struct uloop_process *proc,
|
||||
setenv("DBGLVL", dbg, 1);
|
||||
}
|
||||
|
||||
+ rc_d_path = get_rc_d();
|
||||
+ if (rc_d_path) {
|
||||
+ setenv("RC_D_PATH", rc_d_path, 1);
|
||||
+ free(rc_d_path);
|
||||
+ }
|
||||
+
|
||||
execvp(argv[0], argv);
|
||||
}
|
||||
|
||||
--- a/rcS.c
|
||||
+++ b/rcS.c
|
||||
@@ -184,7 +184,7 @@ int rcS(char *pattern, char *param, void
|
||||
q.empty_cb = q_empty;
|
||||
q.max_running_tasks = 1;
|
||||
|
||||
- return _rc(&q, "/etc/rc.d", pattern, "*", param);
|
||||
+ return _rc(&q, getenv("RC_D_PATH") ?: "/etc/rc.d", pattern, "*", param);
|
||||
}
|
||||
|
||||
int rc(const char *file, char *param)
|
Loading…
Reference in new issue