aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--init.d/rc-enabled.in2
-rw-r--r--man/rc-service.816
-rw-r--r--src/rc/rc-service.c20
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
}