API change! rc_ls_dir, rc_get_config and rc_get_list no longer take
a starting list as a first argument. Instead, use rc_strlist_join to append or prepend the new list to an existing list.
This commit is contained in:
parent
f1bba12892
commit
936dc94351
@ -3,6 +3,10 @@
|
|||||||
|
|
||||||
18 Sep 2007; Roy Marples <uberlord@gentoo.org>:
|
18 Sep 2007; Roy Marples <uberlord@gentoo.org>:
|
||||||
|
|
||||||
|
API change! rc_ls_dir, rc_get_config and rc_get_list no longer take
|
||||||
|
a starting list as a first argument. Instead, use rc_strlist_join
|
||||||
|
to append or prepend the new list to an existing list.
|
||||||
|
|
||||||
API change! rc_strlist_add and friends now take char *** instead of
|
API change! rc_strlist_add and friends now take char *** instead of
|
||||||
char ** and return a pointer to the item added instead of the new
|
char ** and return a pointer to the item added instead of the new
|
||||||
list head. This is so we can easily tell if the item was successfully
|
list head. This is so we can easily tell if the item was successfully
|
||||||
|
@ -85,7 +85,7 @@ static struct option longopts[] = {
|
|||||||
|
|
||||||
int env_update (int argc, char **argv)
|
int env_update (int argc, char **argv)
|
||||||
{
|
{
|
||||||
char **files = rc_ls_dir (NULL, ENVDIR, 0);
|
char **files = rc_ls_dir (ENVDIR, 0);
|
||||||
char *file;
|
char *file;
|
||||||
char **envs = NULL;
|
char **envs = NULL;
|
||||||
char *env;
|
char *env;
|
||||||
@ -138,7 +138,7 @@ int env_update (int argc, char **argv)
|
|||||||
*(file + j - 1) != '~' &&
|
*(file + j - 1) != '~' &&
|
||||||
(j < 4 || strcmp (file + j - 4, ".bak") != 0) &&
|
(j < 4 || strcmp (file + j - 4, ".bak") != 0) &&
|
||||||
(j < 5 || strcmp (file + j - 5, ".core") != 0))
|
(j < 5 || strcmp (file + j - 5, ".core") != 0))
|
||||||
entries = rc_get_config (NULL, path);
|
entries = rc_get_config (path);
|
||||||
free (path);
|
free (path);
|
||||||
|
|
||||||
STRLIST_FOREACH (entries, entry, j) {
|
STRLIST_FOREACH (entries, entry, j) {
|
||||||
@ -293,7 +293,7 @@ int env_update (int argc, char **argv)
|
|||||||
if (ldconfig) {
|
if (ldconfig) {
|
||||||
/* Update ld.so.conf only if different */
|
/* Update ld.so.conf only if different */
|
||||||
if (rc_exists (LDSOCONF)) {
|
if (rc_exists (LDSOCONF)) {
|
||||||
char **lines = rc_get_list (NULL, LDSOCONF);
|
char **lines = rc_get_list (LDSOCONF);
|
||||||
char *line;
|
char *line;
|
||||||
ld = false;
|
ld = false;
|
||||||
|
|
||||||
|
@ -324,7 +324,7 @@ void rc_set_service_daemon (const char *service, const char *exec,
|
|||||||
/* Regardless, erase any existing daemon info */
|
/* Regardless, erase any existing daemon info */
|
||||||
if (rc_is_dir (dirpath)) {
|
if (rc_is_dir (dirpath)) {
|
||||||
char *oldfile = NULL;
|
char *oldfile = NULL;
|
||||||
files = rc_ls_dir (NULL, dirpath, 0);
|
files = rc_ls_dir (dirpath, 0);
|
||||||
STRLIST_FOREACH (files, file, i) {
|
STRLIST_FOREACH (files, file, i) {
|
||||||
ffile = rc_strcatpaths (dirpath, file, (char *) NULL);
|
ffile = rc_strcatpaths (dirpath, file, (char *) NULL);
|
||||||
nfiles++;
|
nfiles++;
|
||||||
@ -407,7 +407,7 @@ bool rc_service_started_daemon (const char *service, const char *exec,
|
|||||||
retval = _match_daemon (dirpath, file, mexec, NULL, NULL);
|
retval = _match_daemon (dirpath, file, mexec, NULL, NULL);
|
||||||
free (file);
|
free (file);
|
||||||
} else {
|
} else {
|
||||||
char **files = rc_ls_dir (NULL, dirpath, 0);
|
char **files = rc_ls_dir (dirpath, 0);
|
||||||
STRLIST_FOREACH (files, file, i) {
|
STRLIST_FOREACH (files, file, i) {
|
||||||
retval = _match_daemon (dirpath, file, mexec, NULL, NULL);
|
retval = _match_daemon (dirpath, file, mexec, NULL, NULL);
|
||||||
if (retval)
|
if (retval)
|
||||||
@ -454,7 +454,7 @@ bool rc_service_daemons_crashed (const char *service)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memset (buffer, 0, sizeof (buffer));
|
memset (buffer, 0, sizeof (buffer));
|
||||||
files = rc_ls_dir (NULL, dirpath, 0);
|
files = rc_ls_dir (dirpath, 0);
|
||||||
STRLIST_FOREACH (files, file, i) {
|
STRLIST_FOREACH (files, file, i) {
|
||||||
path = rc_strcatpaths (dirpath, file, (char *) NULL);
|
path = rc_strcatpaths (dirpath, file, (char *) NULL);
|
||||||
fp = fopen (path, "r");
|
fp = fopen (path, "r");
|
||||||
|
@ -492,25 +492,26 @@ char **rc_order_services (rc_depinfo_t *deptree, const char *runlevel,
|
|||||||
strcmp (runlevel, RC_LEVEL_SHUTDOWN) == 0 ||
|
strcmp (runlevel, RC_LEVEL_SHUTDOWN) == 0 ||
|
||||||
strcmp (runlevel, RC_LEVEL_REBOOT) == 0)
|
strcmp (runlevel, RC_LEVEL_REBOOT) == 0)
|
||||||
{
|
{
|
||||||
list = rc_ls_dir (list, RC_SVCDIR_STARTING, RC_LS_INITD);
|
list = rc_ls_dir (RC_SVCDIR_STARTING, RC_LS_INITD);
|
||||||
list = rc_ls_dir (list, RC_SVCDIR_INACTIVE, RC_LS_INITD);
|
list = rc_strlist_join (list,
|
||||||
list = rc_ls_dir (list, RC_SVCDIR_STARTED, RC_LS_INITD);
|
rc_ls_dir (RC_SVCDIR_INACTIVE, RC_LS_INITD));
|
||||||
|
list = rc_strlist_join (list,
|
||||||
|
rc_ls_dir (RC_SVCDIR_STARTED, RC_LS_INITD));
|
||||||
reverse = true;
|
reverse = true;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
list = rc_services_in_runlevel (runlevel);
|
list = rc_services_in_runlevel (runlevel);
|
||||||
|
|
||||||
/* Add coldplugged services */
|
/* Add coldplugged services */
|
||||||
list = rc_ls_dir (list, RC_SVCDIR_COLDPLUGGED, RC_LS_INITD);
|
list = rc_strlist_join (list,
|
||||||
|
rc_ls_dir (RC_SVCDIR_COLDPLUGGED, RC_LS_INITD));
|
||||||
|
|
||||||
|
|
||||||
/* If we're not the boot runlevel then add that too */
|
/* If we're not the boot runlevel then add that too */
|
||||||
if (strcmp (runlevel, bootlevel) != 0)
|
if (strcmp (runlevel, bootlevel) != 0) {
|
||||||
{
|
|
||||||
char *path = rc_strcatpaths (RC_RUNLEVELDIR, bootlevel,
|
char *path = rc_strcatpaths (RC_RUNLEVELDIR, bootlevel,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
list = rc_ls_dir (list, path, RC_LS_INITD);
|
list = rc_strlist_join (list,
|
||||||
|
rc_ls_dir (path, RC_LS_INITD));
|
||||||
free (path);
|
free (path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -551,7 +552,7 @@ static bool is_newer_than (const char *file, const char *target)
|
|||||||
|
|
||||||
if (rc_is_dir (target))
|
if (rc_is_dir (target))
|
||||||
{
|
{
|
||||||
char **targets = rc_ls_dir (NULL, target, 0);
|
char **targets = rc_ls_dir (target, 0);
|
||||||
char *t;
|
char *t;
|
||||||
int i;
|
int i;
|
||||||
bool newer = true;
|
bool newer = true;
|
||||||
@ -651,7 +652,7 @@ int rc_update_deptree (bool force)
|
|||||||
if (! rc_exists (RC_DEPCONFIG))
|
if (! rc_exists (RC_DEPCONFIG))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
config = rc_get_list (NULL, RC_DEPCONFIG);
|
config = rc_get_list (RC_DEPCONFIG);
|
||||||
STRLIST_FOREACH (config, service, i) {
|
STRLIST_FOREACH (config, service, i) {
|
||||||
if (! is_newer_than (RC_DEPTREE, service)) {
|
if (! is_newer_than (RC_DEPTREE, service)) {
|
||||||
newer = true;
|
newer = true;
|
||||||
|
@ -209,17 +209,18 @@ bool rc_is_exec (const char *pathname)
|
|||||||
}
|
}
|
||||||
librc_hidden_def(rc_is_exec)
|
librc_hidden_def(rc_is_exec)
|
||||||
|
|
||||||
char **rc_ls_dir (char **list, const char *dir, int options)
|
char **rc_ls_dir (const char *dir, int options)
|
||||||
{
|
{
|
||||||
DIR *dp;
|
DIR *dp;
|
||||||
struct dirent *d;
|
struct dirent *d;
|
||||||
|
char **list = NULL;
|
||||||
|
|
||||||
if (! dir)
|
if (! dir)
|
||||||
return (list);
|
return (NULL);
|
||||||
|
|
||||||
if ((dp = opendir (dir)) == NULL) {
|
if ((dp = opendir (dir)) == NULL) {
|
||||||
eerror ("failed to opendir `%s': %s", dir, strerror (errno));
|
eerror ("failed to opendir `%s': %s", dir, strerror (errno));
|
||||||
return (list);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
@ -303,8 +304,9 @@ bool rc_rm_dir (const char *pathname, bool top)
|
|||||||
}
|
}
|
||||||
librc_hidden_def(rc_rm_dir)
|
librc_hidden_def(rc_rm_dir)
|
||||||
|
|
||||||
char **rc_get_config (char **list, const char *file)
|
char **rc_get_config (const char *file)
|
||||||
{
|
{
|
||||||
|
char **list = NULL;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
char buffer[RC_LINEBUFFER];
|
char buffer[RC_LINEBUFFER];
|
||||||
char *p;
|
char *p;
|
||||||
@ -319,7 +321,7 @@ char **rc_get_config (char **list, const char *file)
|
|||||||
|
|
||||||
if (! (fp = fopen (file, "r"))) {
|
if (! (fp = fopen (file, "r"))) {
|
||||||
ewarn ("load_config_file `%s': %s", file, strerror (errno));
|
ewarn ("load_config_file `%s': %s", file, strerror (errno));
|
||||||
return (list);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (fgets (buffer, RC_LINEBUFFER, fp)) {
|
while (fgets (buffer, RC_LINEBUFFER, fp)) {
|
||||||
@ -404,16 +406,17 @@ char *rc_get_config_entry (char **list, const char *entry)
|
|||||||
}
|
}
|
||||||
librc_hidden_def(rc_get_config_entry)
|
librc_hidden_def(rc_get_config_entry)
|
||||||
|
|
||||||
char **rc_get_list (char **list, const char *file)
|
char **rc_get_list (const char *file)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
char buffer[RC_LINEBUFFER];
|
char buffer[RC_LINEBUFFER];
|
||||||
char *p;
|
char *p;
|
||||||
char *token;
|
char *token;
|
||||||
|
char **list = NULL;
|
||||||
|
|
||||||
if (! (fp = fopen (file, "r"))) {
|
if (! (fp = fopen (file, "r"))) {
|
||||||
ewarn ("rc_get_list `%s': %s", file, strerror (errno));
|
ewarn ("rc_get_list `%s': %s", file, strerror (errno));
|
||||||
return (list);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (fgets (buffer, RC_LINEBUFFER, fp)) {
|
while (fgets (buffer, RC_LINEBUFFER, fp)) {
|
||||||
@ -455,17 +458,17 @@ char **rc_filter_env (void)
|
|||||||
char *e;
|
char *e;
|
||||||
int pplen = strlen (PATH_PREFIX);
|
int pplen = strlen (PATH_PREFIX);
|
||||||
|
|
||||||
whitelist = rc_get_list (whitelist, SYS_WHITELIST);
|
whitelist = rc_get_list (SYS_WHITELIST);
|
||||||
if (! whitelist)
|
if (! whitelist)
|
||||||
ewarn ("system environment whitelist (" SYS_WHITELIST ") missing");
|
ewarn ("system environment whitelist (" SYS_WHITELIST ") missing");
|
||||||
|
|
||||||
whitelist = rc_get_list (whitelist, USR_WHITELIST);
|
whitelist = rc_strlist_join (whitelist, rc_get_list (USR_WHITELIST));
|
||||||
|
|
||||||
if (! whitelist)
|
if (! whitelist)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
if (rc_is_file (PROFILE_ENV))
|
if (rc_is_file (PROFILE_ENV))
|
||||||
profile = rc_get_config (profile, PROFILE_ENV);
|
profile = rc_get_config (PROFILE_ENV);
|
||||||
|
|
||||||
STRLIST_FOREACH (whitelist, env_name, count) {
|
STRLIST_FOREACH (whitelist, env_name, count) {
|
||||||
char *space = strchr (env_name, ' ');
|
char *space = strchr (env_name, ' ');
|
||||||
@ -593,9 +596,9 @@ char **rc_config_env (char **env)
|
|||||||
/* Don't trust environ for softlevel yet */
|
/* Don't trust environ for softlevel yet */
|
||||||
snprintf (buffer, PATH_MAX, "%s.%s", RC_CONFIG, rc_get_runlevel());
|
snprintf (buffer, PATH_MAX, "%s.%s", RC_CONFIG, rc_get_runlevel());
|
||||||
if (rc_exists (buffer))
|
if (rc_exists (buffer))
|
||||||
config = rc_get_config (NULL, buffer);
|
config = rc_get_config (buffer);
|
||||||
else
|
else
|
||||||
config = rc_get_config (NULL, RC_CONFIG);
|
config = rc_get_config (RC_CONFIG);
|
||||||
|
|
||||||
STRLIST_FOREACH (config, line, i) {
|
STRLIST_FOREACH (config, line, i) {
|
||||||
p = strchr (line, '=');
|
p = strchr (line, '=');
|
||||||
|
18
src/librc.c
18
src/librc.c
@ -45,7 +45,7 @@ librc_hidden_def(rc_runlevel_stopping)
|
|||||||
|
|
||||||
char **rc_get_runlevels (void)
|
char **rc_get_runlevels (void)
|
||||||
{
|
{
|
||||||
char **dirs = rc_ls_dir (NULL, RC_RUNLEVELDIR, 0);
|
char **dirs = rc_ls_dir (RC_RUNLEVELDIR, 0);
|
||||||
char **runlevels = NULL;
|
char **runlevels = NULL;
|
||||||
int i;
|
int i;
|
||||||
char *dir;
|
char *dir;
|
||||||
@ -384,7 +384,7 @@ bool rc_mark_service (const char *service, const rc_service_state_t state)
|
|||||||
/* These are final states, so remove us from scheduled */
|
/* These are final states, so remove us from scheduled */
|
||||||
if (state == rc_service_started || state == rc_service_stopped) {
|
if (state == rc_service_started || state == rc_service_stopped) {
|
||||||
char *sdir = rc_strcatpaths (RC_SVCDIR, "scheduled", (char *) NULL);
|
char *sdir = rc_strcatpaths (RC_SVCDIR, "scheduled", (char *) NULL);
|
||||||
char **dirs = rc_ls_dir (NULL, sdir, 0);
|
char **dirs = rc_ls_dir (sdir, 0);
|
||||||
char *dir;
|
char *dir;
|
||||||
int serrno;
|
int serrno;
|
||||||
|
|
||||||
@ -692,7 +692,7 @@ char **rc_services_in_runlevel (const char *runlevel)
|
|||||||
char **list = NULL;
|
char **list = NULL;
|
||||||
|
|
||||||
if (! runlevel)
|
if (! runlevel)
|
||||||
return (rc_ls_dir (NULL, RC_INITDIR, RC_LS_INITD));
|
return (rc_ls_dir (RC_INITDIR, RC_LS_INITD));
|
||||||
|
|
||||||
/* These special levels never contain any services */
|
/* These special levels never contain any services */
|
||||||
if (strcmp (runlevel, RC_LEVEL_SYSINIT) == 0 ||
|
if (strcmp (runlevel, RC_LEVEL_SYSINIT) == 0 ||
|
||||||
@ -703,7 +703,7 @@ char **rc_services_in_runlevel (const char *runlevel)
|
|||||||
if (! rc_is_dir (dir))
|
if (! rc_is_dir (dir))
|
||||||
eerror ("runlevel `%s' does not exist", runlevel);
|
eerror ("runlevel `%s' does not exist", runlevel);
|
||||||
else
|
else
|
||||||
list = rc_ls_dir (list, dir, RC_LS_INITD);
|
list = rc_ls_dir (dir, RC_LS_INITD);
|
||||||
|
|
||||||
free (dir);
|
free (dir);
|
||||||
return (list);
|
return (list);
|
||||||
@ -717,13 +717,13 @@ char **rc_services_in_state (rc_service_state_t state)
|
|||||||
char **list = NULL;
|
char **list = NULL;
|
||||||
|
|
||||||
if (state == rc_service_scheduled) {
|
if (state == rc_service_scheduled) {
|
||||||
char **dirs = rc_ls_dir (NULL, dir, 0);
|
char **dirs = rc_ls_dir (dir, 0);
|
||||||
char *d;
|
char *d;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
STRLIST_FOREACH (dirs, d, i) {
|
STRLIST_FOREACH (dirs, d, i) {
|
||||||
char *p = rc_strcatpaths (dir, d, (char *) NULL);
|
char *p = rc_strcatpaths (dir, d, (char *) NULL);
|
||||||
char **entries = rc_ls_dir (NULL, p, RC_LS_INITD);
|
char **entries = rc_ls_dir (p, RC_LS_INITD);
|
||||||
char *e;
|
char *e;
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
@ -738,7 +738,7 @@ char **rc_services_in_state (rc_service_state_t state)
|
|||||||
free (dirs);
|
free (dirs);
|
||||||
} else {
|
} else {
|
||||||
if (rc_is_dir (dir))
|
if (rc_is_dir (dir))
|
||||||
list = rc_ls_dir (list, dir, RC_LS_INITD);
|
list = rc_ls_dir (dir, RC_LS_INITD);
|
||||||
}
|
}
|
||||||
|
|
||||||
free (dir);
|
free (dir);
|
||||||
@ -798,7 +798,7 @@ librc_hidden_def(rc_service_delete)
|
|||||||
|
|
||||||
char **rc_services_scheduled_by (const char *service)
|
char **rc_services_scheduled_by (const char *service)
|
||||||
{
|
{
|
||||||
char **dirs = rc_ls_dir (NULL, RC_SVCDIR "/scheduled", 0);
|
char **dirs = rc_ls_dir (RC_SVCDIR "/scheduled", 0);
|
||||||
char **list = NULL;
|
char **list = NULL;
|
||||||
char *dir;
|
char *dir;
|
||||||
int i;
|
int i;
|
||||||
@ -824,7 +824,7 @@ char **rc_services_scheduled (const char *service)
|
|||||||
char **list = NULL;
|
char **list = NULL;
|
||||||
|
|
||||||
if (rc_is_dir (dir))
|
if (rc_is_dir (dir))
|
||||||
list = rc_ls_dir (list, dir, RC_LS_INITD);
|
list = rc_ls_dir (dir, RC_LS_INITD);
|
||||||
|
|
||||||
free (svc);
|
free (svc);
|
||||||
free (dir);
|
free (dir);
|
||||||
|
@ -62,7 +62,7 @@ void rc_plugin_load (void)
|
|||||||
if (! rc_exists (RC_PLUGINDIR))
|
if (! rc_exists (RC_PLUGINDIR))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
files = rc_ls_dir (NULL, RC_PLUGINDIR, 0);
|
files = rc_ls_dir (RC_PLUGINDIR, 0);
|
||||||
STRLIST_FOREACH (files, file, i) {
|
STRLIST_FOREACH (files, file, i) {
|
||||||
char *p = rc_strcatpaths (RC_PLUGINDIR, file, NULL);
|
char *p = rc_strcatpaths (RC_PLUGINDIR, file, NULL);
|
||||||
void *h = dlopen (p, RTLD_LAZY);
|
void *h = dlopen (p, RTLD_LAZY);
|
||||||
|
24
src/rc.c
24
src/rc.c
@ -1027,7 +1027,7 @@ int main (int argc, char **argv)
|
|||||||
stores a list of coldplugged services in DEVBOOT for us to pick up
|
stores a list of coldplugged services in DEVBOOT for us to pick up
|
||||||
here when we are ready for them */
|
here when we are ready for them */
|
||||||
if (rc_is_dir (DEVBOOT)) {
|
if (rc_is_dir (DEVBOOT)) {
|
||||||
start_services = rc_ls_dir (NULL, DEVBOOT, RC_LS_INITD);
|
start_services = rc_ls_dir (DEVBOOT, RC_LS_INITD);
|
||||||
rc_rm_dir (DEVBOOT, true);
|
rc_rm_dir (DEVBOOT, true);
|
||||||
|
|
||||||
STRLIST_FOREACH (start_services, service, i)
|
STRLIST_FOREACH (start_services, service, i)
|
||||||
@ -1051,7 +1051,7 @@ int main (int argc, char **argv)
|
|||||||
{
|
{
|
||||||
#if defined(__DragonFly__) || defined(__FreeBSD__)
|
#if defined(__DragonFly__) || defined(__FreeBSD__)
|
||||||
/* The net interfaces are easy - they're all in net /dev/net :) */
|
/* The net interfaces are easy - they're all in net /dev/net :) */
|
||||||
start_services = rc_ls_dir (NULL, "/dev/net", 0);
|
start_services = rc_ls_dir ("/dev/net", 0);
|
||||||
STRLIST_FOREACH (start_services, service, i) {
|
STRLIST_FOREACH (start_services, service, i) {
|
||||||
j = (strlen ("net.") + strlen (service) + 1);
|
j = (strlen ("net.") + strlen (service) + 1);
|
||||||
tmp = rc_xmalloc (sizeof (char *) * j);
|
tmp = rc_xmalloc (sizeof (char *) * j);
|
||||||
@ -1065,7 +1065,7 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
/* The mice are a little more tricky.
|
/* The mice are a little more tricky.
|
||||||
If we coldplug anything else, we'll probably do it here. */
|
If we coldplug anything else, we'll probably do it here. */
|
||||||
start_services = rc_ls_dir (NULL, "/dev", 0);
|
start_services = rc_ls_dir ("/dev", 0);
|
||||||
STRLIST_FOREACH (start_services, service, i) {
|
STRLIST_FOREACH (start_services, service, i) {
|
||||||
if (strncmp (service, "psm", 3) == 0 ||
|
if (strncmp (service, "psm", 3) == 0 ||
|
||||||
strncmp (service, "ums", 3) == 0)
|
strncmp (service, "ums", 3) == 0)
|
||||||
@ -1088,9 +1088,11 @@ int main (int argc, char **argv)
|
|||||||
|
|
||||||
/* Build a list of all services to stop and then work out the
|
/* Build a list of all services to stop and then work out the
|
||||||
correct order for stopping them */
|
correct order for stopping them */
|
||||||
stop_services = rc_ls_dir (stop_services, RC_SVCDIR_STARTING, RC_LS_INITD);
|
stop_services = rc_ls_dir (RC_SVCDIR_STARTING, RC_LS_INITD);
|
||||||
stop_services = rc_ls_dir (stop_services, RC_SVCDIR_INACTIVE, RC_LS_INITD);
|
stop_services = rc_strlist_join (stop_services,
|
||||||
stop_services = rc_ls_dir (stop_services, RC_SVCDIR_STARTED, RC_LS_INITD);
|
rc_ls_dir (RC_SVCDIR_INACTIVE, RC_LS_INITD));
|
||||||
|
stop_services = rc_strlist_join (stop_services,
|
||||||
|
rc_ls_dir (RC_SVCDIR_STARTED, RC_LS_INITD));
|
||||||
|
|
||||||
types = NULL;
|
types = NULL;
|
||||||
rc_strlist_add (&types, "ineed");
|
rc_strlist_add (&types, "ineed");
|
||||||
@ -1106,8 +1108,7 @@ int main (int argc, char **argv)
|
|||||||
rc_strlist_reverse (stop_services);
|
rc_strlist_reverse (stop_services);
|
||||||
|
|
||||||
/* Load our list of coldplugged services */
|
/* Load our list of coldplugged services */
|
||||||
coldplugged_services = rc_ls_dir (coldplugged_services,
|
coldplugged_services = rc_ls_dir (RC_SVCDIR_COLDPLUGGED, RC_LS_INITD);
|
||||||
RC_SVCDIR_COLDPLUGGED, RC_LS_INITD);
|
|
||||||
|
|
||||||
/* Load our start services now.
|
/* Load our start services now.
|
||||||
We have different rules dependent on runlevel. */
|
We have different rules dependent on runlevel. */
|
||||||
@ -1122,12 +1123,13 @@ int main (int argc, char **argv)
|
|||||||
}
|
}
|
||||||
tmp = rc_strcatpaths (RC_RUNLEVELDIR, newlevel ? newlevel : runlevel,
|
tmp = rc_strcatpaths (RC_RUNLEVELDIR, newlevel ? newlevel : runlevel,
|
||||||
(char *) NULL);
|
(char *) NULL);
|
||||||
start_services = rc_ls_dir (start_services, tmp, RC_LS_INITD);
|
start_services = rc_strlist_join (start_services,
|
||||||
|
rc_ls_dir (tmp, RC_LS_INITD));
|
||||||
CHAR_FREE (tmp);
|
CHAR_FREE (tmp);
|
||||||
} else {
|
} else {
|
||||||
/* Store our list of coldplugged services */
|
/* Store our list of coldplugged services */
|
||||||
coldplugged_services = rc_ls_dir (coldplugged_services, RC_SVCDIR_COLDPLUGGED,
|
coldplugged_services = rc_strlist_join (coldplugged_services,
|
||||||
RC_LS_INITD);
|
rc_ls_dir (RC_SVCDIR_COLDPLUGGED, RC_LS_INITD));
|
||||||
if (strcmp (newlevel ? newlevel : runlevel, RC_LEVEL_SINGLE) != 0 &&
|
if (strcmp (newlevel ? newlevel : runlevel, RC_LEVEL_SINGLE) != 0 &&
|
||||||
strcmp (newlevel ? newlevel : runlevel, RC_LEVEL_SHUTDOWN) != 0 &&
|
strcmp (newlevel ? newlevel : runlevel, RC_LEVEL_SHUTDOWN) != 0 &&
|
||||||
strcmp (newlevel ? newlevel : runlevel, RC_LEVEL_REBOOT) != 0)
|
strcmp (newlevel ? newlevel : runlevel, RC_LEVEL_REBOOT) != 0)
|
||||||
|
6
src/rc.h
6
src/rc.h
@ -182,13 +182,13 @@ bool rc_is_dir (const char *pathname);
|
|||||||
bool rc_is_exec (const char *pathname);
|
bool rc_is_exec (const char *pathname);
|
||||||
|
|
||||||
#define RC_LS_INITD 0x01
|
#define RC_LS_INITD 0x01
|
||||||
char **rc_ls_dir (char **list, const char *dir, int options);
|
char **rc_ls_dir (const char *dir, int options);
|
||||||
|
|
||||||
bool rc_rm_dir (const char *pathname, bool top);
|
bool rc_rm_dir (const char *pathname, bool top);
|
||||||
|
|
||||||
/* Config file functions */
|
/* Config file functions */
|
||||||
char **rc_get_list (char **list, const char *file);
|
char **rc_get_list (const char *file);
|
||||||
char **rc_get_config (char **list, const char *file);
|
char **rc_get_config (const char *file);
|
||||||
char *rc_get_config_entry (char **list, const char *entry);
|
char *rc_get_config_entry (char **list, const char *entry);
|
||||||
|
|
||||||
/* Make an environment list which filters out all unwanted values
|
/* Make an environment list which filters out all unwanted values
|
||||||
|
Loading…
Reference in New Issue
Block a user