Retain behavior where rc-update del warns if nothing changed.

This commit is contained in:
Mike Frysinger 2007-09-25 17:03:19 +00:00
parent 6fc541a9b8
commit b24e877948
2 changed files with 31 additions and 17 deletions

View File

@ -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

View File

@ -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);
}
}