Add /sbin/getdevpath utility - userland convenience utility for getdevpath(3).
authorMatthew Dillon <dillon@apollo.backplane.com>
Fri, 10 Jul 2009 21:09:13 +0000 (14:09 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Fri, 10 Jul 2009 21:09:13 +0000 (14:09 -0700)
sbin/Makefile
sbin/getdevpath/Makefile [new file with mode: 0644]
sbin/getdevpath/getdevpath.8 [new file with mode: 0644]
sbin/getdevpath/getdevpath.c [new file with mode: 0644]

index 27fb6d9..bb4f307 100644 (file)
@@ -26,6 +26,7 @@ SUBDIR=       adjkerntz \
        fsck_msdosfs \
        fsdb \
        fsirand \
+       getdevpath \
        growfs \
        gpt \
        hammer \
diff --git a/sbin/getdevpath/Makefile b/sbin/getdevpath/Makefile
new file mode 100644 (file)
index 0000000..82922e5
--- /dev/null
@@ -0,0 +1,7 @@
+# Makefile for getdevpath
+#
+PROG=  getdevpath
+LDADD= -lutil
+MAN=   getdevpath.8
+
+.include <bsd.prog.mk>
diff --git a/sbin/getdevpath/getdevpath.8 b/sbin/getdevpath/getdevpath.8
new file mode 100644 (file)
index 0000000..4495b9c
--- /dev/null
@@ -0,0 +1,86 @@
+.\"
+.\" Copyright (c) 2009 The DragonFly Project.  All rights reserved.
+.\"
+.\" This code is derived from software contributed to The DragonFly Project
+.\" by Matthew Dillon <dillon@backplane.com>
+.\"
+.\" 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.
+.\" 3. Neither the name of The DragonFly Project nor the names of its
+.\"    contributors may be used to endorse or promote products derived
+.\"    from this software without specific, prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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
+.\" COPYRIGHT HOLDERS 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.
+.\"
+.Dd July 10, 2009
+.Os
+.Dt getdevpath 8
+.Sh NAME
+.Nm getdevpath
+.Nd "Translate device partial or label to device path"
+.Sh SYNOPSIS
+.Nm
+.Op Fl qr
+.Ar devname ...
+.Sh DESCRIPTION
+The
+.Nm
+utility directly calls the
+.Xr getdevpath 3
+function for each supplied device name, translating the device name
+to a device path.
+.Pp
+The
+.Fl q
+option will generate just the translated output, one per line.
+An empty line is generated if the device name could not be translated.
+.Pp
+The
+.Fl r
+option will take the translated device name and do a further translation
+of it if it is a softlink, returning the contents of the softlink.
+.Sh FILES
+.Nm
+will search the
+.Pa /usr/local/etc/devtab ,
+.Pa /etc/devtab ,
+and
+.Pa /etc/defaults/devtab
+files for label translations.
+.Sh EXAMPLES
+.Pp
+.Dl "getdevpath da0"
+.Pp
+.Dl "getdevpath /dev/da0"
+.Pp
+.Dl "getdevpath serno:ABC123"
+.Pp
+.Dl "getdevpath MyDisk"
+.Sh SEE ALSO
+.Xr getdevpath 3 ,
+.Xr devtab 8 ,
+.Xr fstab 8
+.Sh HISTORY
+The
+.Nm
+utility appeared in
+.Dx 2.4
diff --git a/sbin/getdevpath/getdevpath.c b/sbin/getdevpath/getdevpath.c
new file mode 100644 (file)
index 0000000..126b7b7
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2009 The DragonFly Project.  All rights reserved.
+ *
+ * This code is derived from software contributed to The DragonFly Project
+ * by Matthew Dillon <dillon@backplane.com>
+ *
+ * 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.
+ * 3. Neither the name of The DragonFly Project nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific, prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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
+ * COPYRIGHT HOLDERS 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 <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <libutil.h>
+
+static void usage(void);
+
+int
+main(int ac, char **av)
+{
+       int flags = 0;
+       int i;
+       int ch;
+       int quietopt = 0;
+       int error;
+       char *path;
+
+       while ((ch = getopt(ac, av, "r")) != -1) {
+               switch(ch) {
+               case 'r':
+                       flags |= GETDEVPATH_RAWDEV;
+                       break;
+               case 'q':
+                       quietopt = 1;
+                       break;
+               default:
+                       usage();
+                       /* NOT REACHED */
+                       break;
+               }
+       }
+       ac -= optind;
+       av += optind;
+       error = 0;
+       for (i = 0; i < ac; ++i) {
+               path = getdevpath(av[i], flags);
+               if (quietopt) {
+                       if (path) {
+                               printf("%s\n", path);
+                       } else {
+                               error = 1;
+                               printf("\n");
+                       }
+               } else {
+                       if (path) {
+                               printf("%-20s %s\n", av[i], path);
+                       } else {
+                               printf("%-20s <unknown>\n", av[i]);
+                               error = 1;
+                       }
+               }
+       }
+       exit (error);
+}
+
+static void
+usage(void)
+{
+       fprintf(stderr, "getdevpath [-q] [-r] devname...\n");
+       exit(1);
+}