Add --list to rc-service to list all available services.
This commit is contained in:
parent
e505e6ea41
commit
494fb0a5f6
@ -22,7 +22,7 @@
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.Dd Mar 19, 2008
|
||||
.Dd Mar 21, 2008
|
||||
.Dt RC-SERVICE 8 SMM
|
||||
.Os OpenRC
|
||||
.Sh NAME
|
||||
@ -32,10 +32,18 @@
|
||||
.Nm
|
||||
.Ar service cmd
|
||||
.Op Ar ...
|
||||
.Nm
|
||||
.Fl l , -list
|
||||
.Sh DESCRIPTION
|
||||
Service scripts could be in different places on different systems.
|
||||
.Nm
|
||||
locates the specified service and runs it with the given arguments.
|
||||
.Pp
|
||||
If given the
|
||||
.Fl l , -list
|
||||
argument then
|
||||
.Nm
|
||||
will list all available services.
|
||||
.Sh SEE ALSO
|
||||
.Xr rc 8 ,
|
||||
.Sh AUTHORS
|
||||
|
1
src/rc/.gitignore
vendored
1
src/rc/.gitignore
vendored
@ -62,6 +62,7 @@ rc-depend.o
|
||||
rc-logger.o
|
||||
rc-misc.o
|
||||
rc-plugin.o
|
||||
rc-service.o
|
||||
rc-status.o
|
||||
rc-update.o
|
||||
runscript.o
|
||||
|
@ -1,7 +1,7 @@
|
||||
PROG= rc
|
||||
SRCS= checkpath.c fstabinfo.c mountinfo.c start-stop-daemon.c \
|
||||
rc-applets.c rc-depend.c rc-logger.c \
|
||||
rc-misc.c rc-plugin.c rc-status.c rc-update.c \
|
||||
rc-misc.c rc-plugin.c rc-service.c rc-status.c rc-update.c \
|
||||
runscript.c rc.c
|
||||
|
||||
CLEANFILES= version.h
|
||||
|
@ -26,16 +26,17 @@
|
||||
|
||||
#include "rc.h"
|
||||
|
||||
int checkpath (int argc, char **argv);
|
||||
int fstabinfo (int argc, char **argv);
|
||||
int mountinfo (int argc, char **argv);
|
||||
int rc_depend (int argc, char **argv);
|
||||
int rc_status (int argc, char **argv);
|
||||
int rc_update (int argc, char **argv);
|
||||
int runscript (int argc, char **argv);
|
||||
int start_stop_daemon (int argc, char **argv);
|
||||
int checkpath(int, char **);
|
||||
int fstabinfo(int, char **);
|
||||
int mountinfo(int, char **);
|
||||
int rc_depend(int, char **);
|
||||
int rc_service(int, char **);
|
||||
int rc_status(int, char **);
|
||||
int rc_update(int, char **);
|
||||
int runscript(int, char **);
|
||||
int start_stop_daemon(int, char **);
|
||||
|
||||
void run_applets (int argc, char **argv);
|
||||
void run_applets(int, char **);
|
||||
|
||||
/* Handy function so we can wrap einfo around our deptree */
|
||||
RC_DEPTREE *_rc_deptree_load (int *regen);
|
||||
RC_DEPTREE *_rc_deptree_load (int *);
|
||||
|
@ -362,23 +362,6 @@ static int do_shell_var(int argc, char **argv)
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
static int rc_service(_unused int argc, char **argv)
|
||||
{
|
||||
char *service;
|
||||
|
||||
if (argc < 2)
|
||||
eerrorx("%s: you need to specify a service",
|
||||
applet);
|
||||
|
||||
if (!(service = rc_service_resolve(argv[1])))
|
||||
eerrorx("%s: service `%s' does not exist", applet, argv[1]);
|
||||
|
||||
*++argv = service;
|
||||
execv(*argv, argv);
|
||||
eerrorx("%s: %s", applet, strerror(errno));
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
void run_applets(int argc, char **argv)
|
||||
{
|
||||
int i = 2;
|
||||
|
99
src/rc/rc-service.c
Normal file
99
src/rc/rc-service.c
Normal file
@ -0,0 +1,99 @@
|
||||
/*
|
||||
rc-service.c
|
||||
Finds all OpenRC services
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2008 Roy Marples
|
||||
* All rights reserved
|
||||
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <getopt.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "builtins.h"
|
||||
#include "einfo.h"
|
||||
#include "rc.h"
|
||||
#include "rc-misc.h"
|
||||
|
||||
extern char *applet;
|
||||
|
||||
#include "_usage.h"
|
||||
#define getoptstring "l" getoptstring_COMMON
|
||||
static const struct option longopts[] = {
|
||||
{ "list", 0, NULL, 'l' },
|
||||
longopts_COMMON
|
||||
};
|
||||
static const char * const longopts_help[] = {
|
||||
"list all available services",
|
||||
longopts_help_COMMON
|
||||
};
|
||||
#include "_usage.c"
|
||||
|
||||
int rc_service(int argc, char **argv)
|
||||
{
|
||||
int opt;
|
||||
char *service;
|
||||
RC_STRINGLIST *list;
|
||||
RC_STRING *s;
|
||||
|
||||
/* Ensure that we are only quiet when explicitly told to be */
|
||||
unsetenv("EINFO_QUIET");
|
||||
|
||||
while ((opt = getopt_long(argc, argv, getoptstring,
|
||||
longopts, (int *) 0)) != -1)
|
||||
{
|
||||
switch (opt) {
|
||||
case 'l':
|
||||
list = rc_services_in_runlevel(NULL);
|
||||
if (! list)
|
||||
return EXIT_FAILURE;
|
||||
rc_stringlist_sort(&list);
|
||||
TAILQ_FOREACH(s, list, entries)
|
||||
printf("%s\n", s->value);
|
||||
rc_stringlist_free(list);
|
||||
return EXIT_SUCCESS;
|
||||
/* NOTREACHED */
|
||||
|
||||
case_RC_COMMON_GETOPT
|
||||
}
|
||||
}
|
||||
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
if (!*argv)
|
||||
eerrorx("%s: you need to specify a service", applet);
|
||||
|
||||
if (!(service = rc_service_resolve(*argv)))
|
||||
eerrorx("%s: service `%s' does not exist", applet, *argv);
|
||||
|
||||
*argv = service;
|
||||
execv(*argv, argv);
|
||||
eerrorx("%s: %s", applet, strerror(errno));
|
||||
/* NOTREACHED */
|
||||
}
|
Loading…
Reference in New Issue
Block a user