const correctness
This commit is contained in:
parent
c7f679e97e
commit
5d215f9d63
@ -351,13 +351,14 @@ static char **get_provided (rc_depinfo_t *deptree, rc_depinfo_t *depinfo,
|
|||||||
return (providers.list);
|
return (providers.list);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void visit_service (rc_depinfo_t *deptree, char **types,
|
static void visit_service (rc_depinfo_t *deptree, const char * const *types,
|
||||||
struct lhead *sorted, struct lhead *visited,
|
struct lhead *sorted, struct lhead *visited,
|
||||||
rc_depinfo_t *depinfo,
|
rc_depinfo_t *depinfo,
|
||||||
const char *runlevel, int options)
|
const char *runlevel, int options)
|
||||||
{
|
{
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
char *lp, *item;
|
char *lp;
|
||||||
|
const char *item;
|
||||||
char *service;
|
char *service;
|
||||||
rc_depinfo_t *di;
|
rc_depinfo_t *di;
|
||||||
rc_deptype_t *dt;
|
rc_deptype_t *dt;
|
||||||
@ -441,13 +442,13 @@ static void visit_service (rc_depinfo_t *deptree, char **types,
|
|||||||
}
|
}
|
||||||
|
|
||||||
char **rc_deptree_depends (rc_depinfo_t *deptree,
|
char **rc_deptree_depends (rc_depinfo_t *deptree,
|
||||||
char **types, char **services,
|
const char * const *types, const char * const *services,
|
||||||
const char *runlevel, int options)
|
const char *runlevel, int options)
|
||||||
{
|
{
|
||||||
struct lhead sorted;
|
struct lhead sorted;
|
||||||
struct lhead visited;
|
struct lhead visited;
|
||||||
rc_depinfo_t *di;
|
rc_depinfo_t *di;
|
||||||
char *service;
|
const char *service;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (! deptree || ! services)
|
if (! deptree || ! services)
|
||||||
@ -476,11 +477,11 @@ char **rc_deptree_depends (rc_depinfo_t *deptree,
|
|||||||
}
|
}
|
||||||
librc_hidden_def(rc_deptree_depends)
|
librc_hidden_def(rc_deptree_depends)
|
||||||
|
|
||||||
|
static const const char *order_types[] = { "ineed", "iuse", "iafter", NULL };
|
||||||
char **rc_deptree_order (rc_depinfo_t *deptree, const char *runlevel,
|
char **rc_deptree_order (rc_depinfo_t *deptree, const char *runlevel,
|
||||||
int options)
|
int options)
|
||||||
{
|
{
|
||||||
char **list = NULL;
|
char **list = NULL;
|
||||||
char **types = NULL;
|
|
||||||
char **services = NULL;
|
char **services = NULL;
|
||||||
bool reverse = false;
|
bool reverse = false;
|
||||||
char **tmp = NULL;
|
char **tmp = NULL;
|
||||||
@ -525,13 +526,10 @@ char **rc_deptree_order (rc_depinfo_t *deptree, const char *runlevel,
|
|||||||
|
|
||||||
/* Now we have our lists, we need to pull in any dependencies
|
/* Now we have our lists, we need to pull in any dependencies
|
||||||
and order them */
|
and order them */
|
||||||
rc_strlist_add (&types, "ineed");
|
services = rc_deptree_depends (deptree, order_types, (const char **) list,
|
||||||
rc_strlist_add (&types, "iuse");
|
runlevel,
|
||||||
rc_strlist_add (&types, "iafter");
|
|
||||||
services = rc_deptree_depends (deptree, types, list, runlevel,
|
|
||||||
RC_DEP_STRICT | RC_DEP_TRACE | options);
|
RC_DEP_STRICT | RC_DEP_TRACE | options);
|
||||||
rc_strlist_free (list);
|
rc_strlist_free (list);
|
||||||
rc_strlist_free (types);
|
|
||||||
|
|
||||||
if (reverse)
|
if (reverse)
|
||||||
rc_strlist_reverse (services);
|
rc_strlist_reverse (services);
|
||||||
|
@ -114,7 +114,8 @@ int rc_depend (int argc, char **argv)
|
|||||||
list = NULL;
|
list = NULL;
|
||||||
rc_strlist_add (&list, argv[optind]);
|
rc_strlist_add (&list, argv[optind]);
|
||||||
errno = 0;
|
errno = 0;
|
||||||
depends = rc_deptree_depends (deptree, NULL, list, runlevel, 0);
|
depends = rc_deptree_depends (deptree, NULL, (const char **) list,
|
||||||
|
runlevel, 0);
|
||||||
if (! depends && errno == ENOENT)
|
if (! depends && errno == ENOENT)
|
||||||
eerror ("no dependency info for service `%s'", argv[optind]);
|
eerror ("no dependency info for service `%s'", argv[optind]);
|
||||||
else
|
else
|
||||||
@ -140,7 +141,8 @@ int rc_depend (int argc, char **argv)
|
|||||||
rc_strlist_add (&types, "iuse");
|
rc_strlist_add (&types, "iuse");
|
||||||
}
|
}
|
||||||
|
|
||||||
depends = rc_deptree_depends (deptree, types, services, runlevel, options);
|
depends = rc_deptree_depends (deptree, (const char **) types,
|
||||||
|
(const char **) services, runlevel, options);
|
||||||
|
|
||||||
if (depends) {
|
if (depends) {
|
||||||
STRLIST_FOREACH (depends, service, i) {
|
STRLIST_FOREACH (depends, service, i) {
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
#define APPLET "rc-status"
|
#define APPLET "rc-status"
|
||||||
|
|
||||||
static char const *types[] = { "ineed", "iuse", "iafter", NULL };
|
static const char *types_nua[] = { "ineed", "iuse", "iafter", NULL };
|
||||||
|
|
||||||
static void print_level (char *level)
|
static void print_level (char *level)
|
||||||
{
|
{
|
||||||
@ -146,7 +146,8 @@ int rc_status (int argc, char **argv)
|
|||||||
print_level (level);
|
print_level (level);
|
||||||
services = rc_services_in_runlevel (level);
|
services = rc_services_in_runlevel (level);
|
||||||
if (deptree) {
|
if (deptree) {
|
||||||
ordered = rc_deptree_depends (deptree, (char **) types, services,
|
ordered = rc_deptree_depends (deptree, types_nua,
|
||||||
|
(const char **) services,
|
||||||
level, depopts);
|
level, depopts);
|
||||||
rc_strlist_free (services);
|
rc_strlist_free (services);
|
||||||
services = ordered;
|
services = ordered;
|
||||||
|
30
src/rc.c
30
src/rc.c
@ -72,7 +72,6 @@ static char **coldplugged_services = NULL;
|
|||||||
static char **stop_services = NULL;
|
static char **stop_services = NULL;
|
||||||
static char **start_services = NULL;
|
static char **start_services = NULL;
|
||||||
static rc_depinfo_t *deptree = NULL;
|
static rc_depinfo_t *deptree = NULL;
|
||||||
static char **types = NULL;
|
|
||||||
static char *tmp = NULL;
|
static char *tmp = NULL;
|
||||||
|
|
||||||
struct termios *termios_orig = NULL;
|
struct termios *termios_orig = NULL;
|
||||||
@ -84,6 +83,9 @@ typedef struct pidlist
|
|||||||
} pidlist_t;
|
} pidlist_t;
|
||||||
static pidlist_t *service_pids = NULL;
|
static pidlist_t *service_pids = NULL;
|
||||||
|
|
||||||
|
static const char *types_n[] = { "needsme", NULL };
|
||||||
|
static const char *types_nua[] = { "ineed", "iuse", "iafter", NULL };
|
||||||
|
|
||||||
static void cleanup (void)
|
static void cleanup (void)
|
||||||
{
|
{
|
||||||
if (applet && strcmp (applet, "rc") == 0) {
|
if (applet && strcmp (applet, "rc") == 0) {
|
||||||
@ -108,7 +110,6 @@ static void cleanup (void)
|
|||||||
rc_strlist_free (stop_services);
|
rc_strlist_free (stop_services);
|
||||||
rc_strlist_free (start_services);
|
rc_strlist_free (start_services);
|
||||||
rc_deptree_free (deptree);
|
rc_deptree_free (deptree);
|
||||||
rc_strlist_free (types);
|
|
||||||
|
|
||||||
/* Clean runlevel start, stop markers */
|
/* Clean runlevel start, stop markers */
|
||||||
if (! rc_in_plugin) {
|
if (! rc_in_plugin) {
|
||||||
@ -1153,17 +1154,11 @@ int main (int argc, char **argv)
|
|||||||
rc_strlist_join (&stop_services, tmplist);
|
rc_strlist_join (&stop_services, tmplist);
|
||||||
rc_strlist_free (tmplist);
|
rc_strlist_free (tmplist);
|
||||||
|
|
||||||
types = NULL;
|
deporder = rc_deptree_depends (deptree, types_nua,
|
||||||
rc_strlist_add (&types, "ineed");
|
(const char **) stop_services,
|
||||||
rc_strlist_add (&types, "iuse");
|
|
||||||
rc_strlist_add (&types, "iafter");
|
|
||||||
|
|
||||||
deporder = rc_deptree_depends (deptree, types, stop_services,
|
|
||||||
runlevel, depoptions | RC_DEP_STOP);
|
runlevel, depoptions | RC_DEP_STOP);
|
||||||
|
|
||||||
rc_strlist_free (stop_services);
|
rc_strlist_free (stop_services);
|
||||||
rc_strlist_free (types);
|
|
||||||
types = NULL;
|
|
||||||
stop_services = deporder;
|
stop_services = deporder;
|
||||||
deporder = NULL;
|
deporder = NULL;
|
||||||
rc_strlist_reverse (stop_services);
|
rc_strlist_reverse (stop_services);
|
||||||
@ -1212,8 +1207,6 @@ int main (int argc, char **argv)
|
|||||||
if (going_down)
|
if (going_down)
|
||||||
rc_runlevel_set (newlevel);
|
rc_runlevel_set (newlevel);
|
||||||
|
|
||||||
types = NULL;
|
|
||||||
rc_strlist_add (&types, "needsme");
|
|
||||||
/* Now stop the services that shouldn't be running */
|
/* Now stop the services that shouldn't be running */
|
||||||
STRLIST_FOREACH (stop_services, service, i) {
|
STRLIST_FOREACH (stop_services, service, i) {
|
||||||
bool found = false;
|
bool found = false;
|
||||||
@ -1274,7 +1267,8 @@ int main (int argc, char **argv)
|
|||||||
/* We got this far! Or last check is to see if any any service that
|
/* We got this far! Or last check is to see if any any service that
|
||||||
going to be started depends on us */
|
going to be started depends on us */
|
||||||
rc_strlist_add (&stopdeps, service);
|
rc_strlist_add (&stopdeps, service);
|
||||||
deporder = rc_deptree_depends (deptree, types, stopdeps,
|
deporder = rc_deptree_depends (deptree, types_n,
|
||||||
|
(const char **) stopdeps,
|
||||||
runlevel, RC_DEP_STRICT);
|
runlevel, RC_DEP_STRICT);
|
||||||
rc_strlist_free (stopdeps);
|
rc_strlist_free (stopdeps);
|
||||||
stopdeps = NULL;
|
stopdeps = NULL;
|
||||||
@ -1298,8 +1292,6 @@ int main (int argc, char **argv)
|
|||||||
wait_pid (pid);
|
wait_pid (pid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rc_strlist_free (types);
|
|
||||||
types = NULL;
|
|
||||||
|
|
||||||
/* Wait for our services to finish */
|
/* Wait for our services to finish */
|
||||||
wait_for_services ();
|
wait_for_services ();
|
||||||
@ -1341,13 +1333,9 @@ int main (int argc, char **argv)
|
|||||||
rc_service_mark (service, RC_SERVICE_COLDPLUGGED);
|
rc_service_mark (service, RC_SERVICE_COLDPLUGGED);
|
||||||
|
|
||||||
/* Order the services to start */
|
/* Order the services to start */
|
||||||
rc_strlist_add (&types, "ineed");
|
deporder = rc_deptree_depends (deptree, types_nua,
|
||||||
rc_strlist_add (&types, "iuse");
|
(const char **) start_services,
|
||||||
rc_strlist_add (&types, "iafter");
|
|
||||||
deporder = rc_deptree_depends (deptree, types, start_services,
|
|
||||||
runlevel, depoptions | RC_DEP_START);
|
runlevel, depoptions | RC_DEP_START);
|
||||||
rc_strlist_free (types);
|
|
||||||
types = NULL;
|
|
||||||
rc_strlist_free (start_services);
|
rc_strlist_free (start_services);
|
||||||
start_services = deporder;
|
start_services = deporder;
|
||||||
deporder = NULL;
|
deporder = NULL;
|
||||||
|
5
src/rc.h
5
src/rc.h
@ -264,8 +264,9 @@ rc_depinfo_t *rc_deptree_load (void);
|
|||||||
* @param services to check
|
* @param services to check
|
||||||
* @param options to pass
|
* @param options to pass
|
||||||
* @return NULL terminated list of services in order */
|
* @return NULL terminated list of services in order */
|
||||||
char **rc_deptree_depends (rc_depinfo_t *deptree, char **types,
|
char **rc_deptree_depends (rc_depinfo_t *deptree, const char * const *types,
|
||||||
char **services, const char *runlevel, int options);
|
const char * const *services, const char *runlevel,
|
||||||
|
int options);
|
||||||
|
|
||||||
/*! List all the services that should be stoppned and then started, in order,
|
/*! List all the services that should be stoppned and then started, in order,
|
||||||
* for the given runlevel, including sysinit and boot services where
|
* for the given runlevel, including sysinit and boot services where
|
||||||
|
@ -51,10 +51,8 @@ static char *exclusive = NULL;
|
|||||||
static char *mtime_test = NULL;
|
static char *mtime_test = NULL;
|
||||||
static rc_depinfo_t *deptree = NULL;
|
static rc_depinfo_t *deptree = NULL;
|
||||||
static char **services = NULL;
|
static char **services = NULL;
|
||||||
static char **svclist = NULL;
|
|
||||||
static char **tmplist = NULL;
|
static char **tmplist = NULL;
|
||||||
static char **providelist = NULL;
|
static char **providelist = NULL;
|
||||||
static char **types = NULL;
|
|
||||||
static char **restart_services = NULL;
|
static char **restart_services = NULL;
|
||||||
static char **need_services = NULL;
|
static char **need_services = NULL;
|
||||||
static char **use_services = NULL;
|
static char **use_services = NULL;
|
||||||
@ -73,6 +71,15 @@ static int master_tty = -1;
|
|||||||
|
|
||||||
extern char **environ;
|
extern char **environ;
|
||||||
|
|
||||||
|
static const char *types_b[] = { "broken", NULL };
|
||||||
|
static const char *types_n[] = { "ineed", NULL };
|
||||||
|
static const char *types_nu[] = { "ineed", "iuse", NULL };
|
||||||
|
static const char *types_nua[] = { "ineed", "iuse", "iafter", NULL };
|
||||||
|
static const char *types_p[] = { "iprovide", NULL };
|
||||||
|
|
||||||
|
static const char *types_m[] = { "needsme", NULL };
|
||||||
|
static const char *types_mua[] = { "needsme", "usesme", "beforeme", NULL };
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
static void (*selinux_run_init_old) (void);
|
static void (*selinux_run_init_old) (void);
|
||||||
static void (*selinux_run_init_new) (int argc, char **argv);
|
static void (*selinux_run_init_new) (int argc, char **argv);
|
||||||
@ -299,8 +306,6 @@ static void cleanup (void)
|
|||||||
rc_plugin_unload ();
|
rc_plugin_unload ();
|
||||||
rc_deptree_free (deptree);
|
rc_deptree_free (deptree);
|
||||||
rc_strlist_free (services);
|
rc_strlist_free (services);
|
||||||
rc_strlist_free (types);
|
|
||||||
rc_strlist_free (svclist);
|
|
||||||
rc_strlist_free (providelist);
|
rc_strlist_free (providelist);
|
||||||
rc_strlist_free (need_services);
|
rc_strlist_free (need_services);
|
||||||
rc_strlist_free (use_services);
|
rc_strlist_free (use_services);
|
||||||
@ -580,6 +585,7 @@ static void svc_start (bool deps)
|
|||||||
int i;
|
int i;
|
||||||
int j;
|
int j;
|
||||||
int depoptions = RC_DEP_TRACE;
|
int depoptions = RC_DEP_TRACE;
|
||||||
|
const char *svcl[] = { applet, NULL };
|
||||||
rc_service_state_t state;
|
rc_service_state_t state;
|
||||||
|
|
||||||
hook_out = RC_HOOK_SERVICE_START_OUT;
|
hook_out = RC_HOOK_SERVICE_START_OUT;
|
||||||
@ -617,14 +623,8 @@ static void svc_start (bool deps)
|
|||||||
if (! deptree && ((deptree = _rc_deptree_load ()) == NULL))
|
if (! deptree && ((deptree = _rc_deptree_load ()) == NULL))
|
||||||
eerrorx ("failed to load deptree");
|
eerrorx ("failed to load deptree");
|
||||||
|
|
||||||
rc_strlist_free (types);
|
|
||||||
types = NULL;
|
|
||||||
rc_strlist_add (&types, "broken");
|
|
||||||
rc_strlist_free (svclist);
|
|
||||||
svclist = NULL;
|
|
||||||
rc_strlist_add (&svclist, applet);
|
|
||||||
rc_strlist_free (services);
|
rc_strlist_free (services);
|
||||||
services = rc_deptree_depends (deptree, types, svclist, softlevel, 0);
|
services = rc_deptree_depends (deptree, types_b, svcl, softlevel, 0);
|
||||||
if (services) {
|
if (services) {
|
||||||
eerrorn ("ERROR: `%s' needs ", applet);
|
eerrorn ("ERROR: `%s' needs ", applet);
|
||||||
STRLIST_FOREACH (services, svc, i) {
|
STRLIST_FOREACH (services, svc, i) {
|
||||||
@ -637,16 +637,12 @@ static void svc_start (bool deps)
|
|||||||
rc_strlist_free (services);
|
rc_strlist_free (services);
|
||||||
services = NULL;
|
services = NULL;
|
||||||
|
|
||||||
rc_strlist_free (types);
|
|
||||||
types = NULL;
|
|
||||||
rc_strlist_add (&types, "ineed");
|
|
||||||
rc_strlist_free (need_services);
|
rc_strlist_free (need_services);
|
||||||
need_services = rc_deptree_depends (deptree, types, svclist,
|
need_services = rc_deptree_depends (deptree, types_n, svcl,
|
||||||
softlevel, depoptions);
|
softlevel, depoptions);
|
||||||
|
|
||||||
rc_strlist_add (&types, "iuse");
|
|
||||||
rc_strlist_free (use_services);
|
rc_strlist_free (use_services);
|
||||||
use_services = rc_deptree_depends (deptree, types, svclist,
|
use_services = rc_deptree_depends (deptree, types_nu, svcl,
|
||||||
softlevel, depoptions);
|
softlevel, depoptions);
|
||||||
|
|
||||||
if (! rc_runlevel_starting ()) {
|
if (! rc_runlevel_starting ()) {
|
||||||
@ -659,9 +655,8 @@ static void svc_start (bool deps)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Now wait for them to start */
|
/* Now wait for them to start */
|
||||||
rc_strlist_add (&types, "iafter");
|
services = rc_deptree_depends (deptree, types_nua, svcl,
|
||||||
services = rc_deptree_depends (deptree, types, svclist,
|
softlevel, depoptions);
|
||||||
softlevel, depoptions);
|
|
||||||
|
|
||||||
/* We use tmplist to hold our scheduled by list */
|
/* We use tmplist to hold our scheduled by list */
|
||||||
rc_strlist_free (tmplist);
|
rc_strlist_free (tmplist);
|
||||||
@ -712,18 +707,13 @@ static void svc_start (bool deps)
|
|||||||
rc_service_mark (service, RC_SERVICE_STOPPED);
|
rc_service_mark (service, RC_SERVICE_STOPPED);
|
||||||
unlink_mtime_test ();
|
unlink_mtime_test ();
|
||||||
|
|
||||||
rc_strlist_free (types);
|
|
||||||
types = NULL;
|
|
||||||
rc_strlist_add (&types, "iprovide");
|
|
||||||
STRLIST_FOREACH (tmplist, svc, i) {
|
STRLIST_FOREACH (tmplist, svc, i) {
|
||||||
|
const char *sl[] = { svc, NULL };
|
||||||
rc_service_schedule_start (svc, service);
|
rc_service_schedule_start (svc, service);
|
||||||
|
|
||||||
rc_strlist_free (svclist);
|
|
||||||
svclist = NULL;
|
|
||||||
rc_strlist_add (&svclist, svc);
|
|
||||||
rc_strlist_free (providelist);
|
rc_strlist_free (providelist);
|
||||||
providelist = rc_deptree_depends (deptree, types, svclist,
|
providelist = rc_deptree_depends (deptree, types_p, sl,
|
||||||
softlevel, depoptions);
|
softlevel, depoptions);
|
||||||
STRLIST_FOREACH (providelist, svc2, j)
|
STRLIST_FOREACH (providelist, svc2, j)
|
||||||
rc_service_schedule_start (svc2, service);
|
rc_service_schedule_start (svc2, service);
|
||||||
|
|
||||||
@ -749,10 +739,6 @@ static void svc_start (bool deps)
|
|||||||
|
|
||||||
rc_strlist_free (services);
|
rc_strlist_free (services);
|
||||||
services = NULL;
|
services = NULL;
|
||||||
rc_strlist_free (types);
|
|
||||||
types = NULL;
|
|
||||||
rc_strlist_free (svclist);
|
|
||||||
svclist = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ibsave)
|
if (ibsave)
|
||||||
@ -791,14 +777,8 @@ static void svc_start (bool deps)
|
|||||||
services = NULL;
|
services = NULL;
|
||||||
|
|
||||||
/* Do the same for any services we provide */
|
/* Do the same for any services we provide */
|
||||||
rc_strlist_free (types);
|
|
||||||
types = NULL;
|
|
||||||
rc_strlist_add (&types, "iprovide");
|
|
||||||
rc_strlist_free (svclist);
|
|
||||||
svclist = NULL;
|
|
||||||
rc_strlist_add (&svclist, applet);
|
|
||||||
rc_strlist_free (tmplist);
|
rc_strlist_free (tmplist);
|
||||||
tmplist = rc_deptree_depends (deptree, types, svclist, softlevel, depoptions);
|
tmplist = rc_deptree_depends (deptree, types_p, svcl, softlevel, depoptions);
|
||||||
|
|
||||||
STRLIST_FOREACH (tmplist, svc2, j) {
|
STRLIST_FOREACH (tmplist, svc2, j) {
|
||||||
rc_strlist_free (services);
|
rc_strlist_free (services);
|
||||||
@ -815,6 +795,8 @@ static void svc_start (bool deps)
|
|||||||
static void svc_stop (bool deps)
|
static void svc_stop (bool deps)
|
||||||
{
|
{
|
||||||
bool stopped;
|
bool stopped;
|
||||||
|
const char *svcl[] = { applet, NULL };
|
||||||
|
|
||||||
rc_service_state_t state = rc_service_state (service);
|
rc_service_state_t state = rc_service_state (service);
|
||||||
|
|
||||||
hook_out = RC_HOOK_SERVICE_STOP_OUT;
|
hook_out = RC_HOOK_SERVICE_STOP_OUT;
|
||||||
@ -857,17 +839,11 @@ static void svc_stop (bool deps)
|
|||||||
if (! deptree && ((deptree = _rc_deptree_load ()) == NULL))
|
if (! deptree && ((deptree = _rc_deptree_load ()) == NULL))
|
||||||
eerrorx ("failed to load deptree");
|
eerrorx ("failed to load deptree");
|
||||||
|
|
||||||
rc_strlist_free (types);
|
|
||||||
types = NULL;
|
|
||||||
rc_strlist_add (&types, "needsme");
|
|
||||||
rc_strlist_free (svclist);
|
|
||||||
svclist = NULL;
|
|
||||||
rc_strlist_add (&svclist, applet);
|
|
||||||
rc_strlist_free (tmplist);
|
rc_strlist_free (tmplist);
|
||||||
tmplist = NULL;
|
tmplist = NULL;
|
||||||
rc_strlist_free (services);
|
rc_strlist_free (services);
|
||||||
services = rc_deptree_depends (deptree, types, svclist,
|
services = rc_deptree_depends (deptree, types_m, svcl,
|
||||||
softlevel, depoptions);
|
softlevel, depoptions);
|
||||||
rc_strlist_reverse (services);
|
rc_strlist_reverse (services);
|
||||||
STRLIST_FOREACH (services, svc, i) {
|
STRLIST_FOREACH (services, svc, i) {
|
||||||
rc_service_state_t svcs = rc_service_state (svc);
|
rc_service_state_t svcs = rc_service_state (svc);
|
||||||
@ -915,10 +891,8 @@ static void svc_stop (bool deps)
|
|||||||
|
|
||||||
/* We now wait for other services that may use us and are stopping
|
/* We now wait for other services that may use us and are stopping
|
||||||
This is important when a runlevel stops */
|
This is important when a runlevel stops */
|
||||||
rc_strlist_add (&types, "usesme");
|
services = rc_deptree_depends (deptree, types_mua, svcl,
|
||||||
rc_strlist_add (&types, "ibefore");
|
softlevel, depoptions);
|
||||||
services = rc_deptree_depends (deptree, types, svclist,
|
|
||||||
softlevel, depoptions);
|
|
||||||
STRLIST_FOREACH (services, svc, i) {
|
STRLIST_FOREACH (services, svc, i) {
|
||||||
if (rc_service_state (svc) & RC_SERVICE_STOPPED)
|
if (rc_service_state (svc) & RC_SERVICE_STOPPED)
|
||||||
continue;
|
continue;
|
||||||
@ -927,8 +901,6 @@ static void svc_stop (bool deps)
|
|||||||
|
|
||||||
rc_strlist_free (services);
|
rc_strlist_free (services);
|
||||||
services = NULL;
|
services = NULL;
|
||||||
rc_strlist_free (types);
|
|
||||||
types = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ibsave)
|
if (ibsave)
|
||||||
@ -957,7 +929,6 @@ static void svc_stop (bool deps)
|
|||||||
unlink (exclusive);
|
unlink (exclusive);
|
||||||
hook_out = 0;
|
hook_out = 0;
|
||||||
rc_plugin_run (RC_HOOK_SERVICE_STOP_OUT, applet);
|
rc_plugin_run (RC_HOOK_SERVICE_STOP_OUT, applet);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void svc_restart (bool deps)
|
static void svc_restart (bool deps)
|
||||||
@ -1213,6 +1184,8 @@ int runscript (int argc, char **argv)
|
|||||||
strcmp (optarg, "ibefore") == 0 ||
|
strcmp (optarg, "ibefore") == 0 ||
|
||||||
strcmp (optarg, "iprovide") == 0) {
|
strcmp (optarg, "iprovide") == 0) {
|
||||||
int depoptions = RC_DEP_TRACE;
|
int depoptions = RC_DEP_TRACE;
|
||||||
|
const char *t[] = { optarg, NULL };
|
||||||
|
const char *s[] = { applet, NULL };
|
||||||
|
|
||||||
if (rc_env_bool ("RC_DEPEND_STRICT"))
|
if (rc_env_bool ("RC_DEPEND_STRICT"))
|
||||||
depoptions |= RC_DEP_STRICT;
|
depoptions |= RC_DEP_STRICT;
|
||||||
@ -1220,15 +1193,8 @@ int runscript (int argc, char **argv)
|
|||||||
if (! deptree && ((deptree = _rc_deptree_load ()) == NULL))
|
if (! deptree && ((deptree = _rc_deptree_load ()) == NULL))
|
||||||
eerrorx ("failed to load deptree");
|
eerrorx ("failed to load deptree");
|
||||||
|
|
||||||
rc_strlist_free (types);
|
|
||||||
types = NULL;
|
|
||||||
rc_strlist_add (&types, optarg);
|
|
||||||
rc_strlist_free (svclist);
|
|
||||||
svclist = NULL;
|
|
||||||
rc_strlist_add (&svclist, applet);
|
|
||||||
rc_strlist_free (services);
|
rc_strlist_free (services);
|
||||||
services = rc_deptree_depends (deptree, types, svclist,
|
services = rc_deptree_depends (deptree, t, s, softlevel, depoptions);
|
||||||
softlevel, depoptions);
|
|
||||||
STRLIST_FOREACH (services, svc, i)
|
STRLIST_FOREACH (services, svc, i)
|
||||||
printf ("%s%s", i == 1 ? "" : " ", svc);
|
printf ("%s%s", i == 1 ? "" : " ", svc);
|
||||||
if (services)
|
if (services)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user