Add --exists and --resolve to rc-service.

This commit is contained in:
Roy Marples 2008-03-26 08:08:47 +00:00
parent e30ea10e6c
commit be1f9b0a93
3 changed files with 34 additions and 4 deletions

View File

@ -24,7 +24,7 @@ start()
done
# If we have an init script for this service, continue
rc-service --list | grep -q "${service}" && continue
rc-service --exists "${service}" && continue
# Ensure that the users rc.conf will start us - ignore the defaults
eval enabled=\$${svc##*/}_enable

View File

@ -22,7 +22,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.Dd Mar 21, 2008
.Dd Mar 26, 2008
.Dt RC-SERVICE 8 SMM
.Os OpenRC
.Sh NAME
@ -34,6 +34,12 @@
.Op Ar ...
.Nm
.Fl l , -list
.Nm
.Fl e , -exists
.Ar service
.Nm
.Fl r , -resolve
.Ar service
.Sh DESCRIPTION
Service scripts could be in different places on different systems.
.Nm
@ -44,7 +50,15 @@ If given the
argument then
.Nm
will list all available services.
.Pp
.Fl -e , exists
return 0 if it can find
.Ar service ,
otherwise -1.
.Fl -r , resolve
does the same and also prints the full path of the service to stdout.
.Sh SEE ALSO
.Xr rc 8 ,
.Xr stdout 3
.Sh AUTHORS
.An "Roy Marples" Aq roy@marples.name

View File

@ -43,9 +43,11 @@
extern char *applet;
#include "_usage.h"
#define getoptstring "l" getoptstring_COMMON
#define getoptstring "e:lr:" getoptstring_COMMON
static const struct option longopts[] = {
{ "list", 0, NULL, 'l' },
{ "exists", 1, NULL, 'e' },
{ "list", 0, NULL, 'l' },
{ "resolve", 1, NULL, 'r' },
longopts_COMMON
};
static const char * const longopts_help[] = {
@ -68,6 +70,12 @@ int rc_service(int argc, char **argv)
longopts, (int *) 0)) != -1)
{
switch (opt) {
case 'e':
service = rc_service_resolve(optarg);
opt = service ? EXIT_SUCCESS : EXIT_FAILURE;
free(service);
return opt;
/* NOTREACHED */
case 'l':
list = rc_services_in_runlevel(NULL);
if (! list)
@ -78,6 +86,14 @@ int rc_service(int argc, char **argv)
rc_stringlist_free(list);
return EXIT_SUCCESS;
/* NOTREACHED */
case 'r':
service = rc_service_resolve(optarg);
if (!service)
return EXIT_FAILURE;
printf("%s\n", service);
free(service);
return EXIT_SUCCESS;
/* NOTREACHED */
case_RC_COMMON_GETOPT
}