From be1f9b0a93ac3af0899fc7cf70ed7604dbc598a4 Mon Sep 17 00:00:00 2001 From: Roy Marples Date: Wed, 26 Mar 2008 08:08:47 +0000 Subject: [PATCH] Add --exists and --resolve to rc-service. --- init.d/rc-enabled.in | 2 +- man/rc-service.8 | 16 +++++++++++++++- src/rc/rc-service.c | 20 ++++++++++++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/init.d/rc-enabled.in b/init.d/rc-enabled.in index f222e6ad..82dc5964 100644 --- a/init.d/rc-enabled.in +++ b/init.d/rc-enabled.in @@ -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 diff --git a/man/rc-service.8 b/man/rc-service.8 index 0668eafa..4b9c7810 100644 --- a/man/rc-service.8 +++ b/man/rc-service.8 @@ -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 diff --git a/src/rc/rc-service.c b/src/rc/rc-service.c index e7bd62c8..d3f52b0d 100644 --- a/src/rc/rc-service.c +++ b/src/rc/rc-service.c @@ -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 }