Retain behavior where rc-update del
warns if nothing changed.
This commit is contained in:
parent
6fc541a9b8
commit
b24e877948
@ -9,6 +9,8 @@
|
||||
|
||||
Retain behavior where `rc-update del foo` deletes foo from all runlevels.
|
||||
|
||||
Retain behavior where `rc-update del` warns if nothing changed.
|
||||
|
||||
24 Sep 2007; Mike Frysinger <vapier@gentoo.org>:
|
||||
|
||||
Do not require portmap in netmount when nolock option is used with nfs
|
||||
|
@ -24,9 +24,14 @@
|
||||
|
||||
static char *applet = NULL;
|
||||
|
||||
static bool add (const char *runlevel, const char *service)
|
||||
/* Return the number of changes made:
|
||||
* -1 = no changes (error)
|
||||
* 0 = no changes (nothing to do)
|
||||
* 1+ = number of runlevels updated
|
||||
*/
|
||||
static ssize_t add (const char *runlevel, const char *service)
|
||||
{
|
||||
bool retval = false;
|
||||
ssize_t retval = -1;
|
||||
|
||||
if (! rc_service_exists (service))
|
||||
eerror ("%s: service `%s' does not exist", applet, service);
|
||||
@ -35,10 +40,10 @@ static bool add (const char *runlevel, const char *service)
|
||||
else if (rc_service_in_runlevel (service, runlevel)) {
|
||||
ewarn ("%s: %s already installed in runlevel `%s'; skipping",
|
||||
applet, service, runlevel);
|
||||
retval = true;
|
||||
retval = 0;
|
||||
} else if (rc_service_add (runlevel, service)) {
|
||||
einfo ("%s added to runlevel %s", service, runlevel);
|
||||
retval = true;
|
||||
retval = 1;
|
||||
} else
|
||||
eerror ("%s: failed to add service `%s' to runlevel `%s': %s",
|
||||
applet, service, runlevel, strerror (errno));
|
||||
@ -46,14 +51,14 @@ static bool add (const char *runlevel, const char *service)
|
||||
return (retval);
|
||||
}
|
||||
|
||||
static bool delete (const char *runlevel, const char *service)
|
||||
static ssize_t delete (const char *runlevel, const char *service)
|
||||
{
|
||||
bool retval = false;
|
||||
ssize_t retval = -1;
|
||||
|
||||
if (rc_service_in_runlevel (service, runlevel)) {
|
||||
if (rc_service_delete (runlevel, service)) {
|
||||
einfo ("%s removed from runlevel %s", service, runlevel);
|
||||
retval = true;
|
||||
retval = 1;
|
||||
} else
|
||||
eerror ("%s: failed to remove service `%s' from runlevel `%s': %s",
|
||||
applet, service, runlevel, strerror (errno));
|
||||
@ -62,7 +67,8 @@ static bool delete (const char *runlevel, const char *service)
|
||||
else if (! rc_runlevel_exists (runlevel))
|
||||
eerror ("%s: runlevel `%s' does not exist", applet, runlevel);
|
||||
else
|
||||
retval = true;
|
||||
retval = 0;
|
||||
|
||||
return (retval);
|
||||
}
|
||||
|
||||
@ -200,6 +206,7 @@ int rc_update (int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
retval = EXIT_SUCCESS;
|
||||
if (action & DOSHOW) {
|
||||
if (service)
|
||||
rc_strlist_add (&runlevels, service);
|
||||
@ -207,25 +214,30 @@ int rc_update (int argc, char **argv)
|
||||
runlevels = rc_get_runlevels ();
|
||||
|
||||
show (runlevels, verbose);
|
||||
retval = EXIT_SUCCESS;
|
||||
} else {
|
||||
if (! service)
|
||||
eerror ("%s: no service specified", applet);
|
||||
else if (! rc_service_exists (service))
|
||||
eerror ("%s: service `%s' does not exist", applet, service);
|
||||
else {
|
||||
retval = EXIT_SUCCESS;
|
||||
ssize_t num_updated = 0;
|
||||
ssize_t (*actfunc)(const char *runlevel, const char *service);
|
||||
if (action & DOADD)
|
||||
actfunc = add;
|
||||
else if (action & DODELETE)
|
||||
actfunc = delete;
|
||||
else
|
||||
eerrorx ("%s: invalid action", applet);
|
||||
if (! runlevels)
|
||||
runlevels = rc_get_runlevels ();
|
||||
STRLIST_FOREACH (runlevels, runlevel, i) {
|
||||
if (action & DOADD) {
|
||||
if (! add (runlevel, service))
|
||||
retval = EXIT_FAILURE;
|
||||
} else if (action & DODELETE) {
|
||||
if (! delete (runlevel, service))
|
||||
retval = EXIT_FAILURE;
|
||||
}
|
||||
ssize_t ret = actfunc (runlevel, service);
|
||||
if (ret < 0)
|
||||
retval = EXIT_FAILURE;
|
||||
num_updated += ret;
|
||||
}
|
||||
if (retval == EXIT_SUCCESS && num_updated == 0)
|
||||
ewarnx ("%s: service `%s' not found in any of the specified runlevels", applet, service);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user