diff options
-rw-r--r-- | init.d/rc-enabled.in | 2 | ||||
-rw-r--r-- | man/rc-service.8 | 16 | ||||
-rw-r--r-- | 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 } |