summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcharnier <charnier@FreeBSD.org>1997-10-27 07:55:31 +0000
committercharnier <charnier@FreeBSD.org>1997-10-27 07:55:31 +0000
commit32c601ba500849daf4a5a8ea0c4cb9cb72389c33 (patch)
treecdc5ce0edc5dcd6902b5eaa241646037f295aba2
parent54e2b69a0f0d38b78a0d896ffbb34448b5a9aa4b (diff)
downloadFreeBSD-src-32c601ba500849daf4a5a8ea0c4cb9cb72389c33.zip
FreeBSD-src-32c601ba500849daf4a5a8ea0c4cb9cb72389c33.tar.gz
Use err(3). Add prototypes. Document -s and -r flags.
-rw-r--r--usr.sbin/vnconfig/vnconfig.848
-rw-r--r--usr.sbin/vnconfig/vnconfig.c77
2 files changed, 71 insertions, 54 deletions
diff --git a/usr.sbin/vnconfig/vnconfig.8 b/usr.sbin/vnconfig/vnconfig.8
index 506d8a2..6b296f8 100644
--- a/usr.sbin/vnconfig/vnconfig.8
+++ b/usr.sbin/vnconfig/vnconfig.8
@@ -44,16 +44,20 @@
.Nd configure and enable vnode disks
.Sh SYNOPSIS
.Nm vnconfig
-.Op Fl cdeuv
+.Op Fl cdeguv
+.Op Fl s Ar option
+.Op Fl r Ar option
.Ar special_file Ar regular_file
-.Oo Ar feature Oc
+.Op Ar feature
.Nm vnconfig
.Fl a
-.Op Fl cdeuv
+.Op Fl cdeguv
+.Op Fl s Ar option
+.Op Fl r Ar option
.Op Fl f Ar config_file
.Sh DESCRIPTION
The
-.Nm vnconfig
+.Nm
command configures and enables vnode pseudo disk devices.
The first form of the command will associate the special file
.Ar special_file
@@ -65,24 +69,41 @@ or can contain a filesystem that is mounted in the name space.
.Pp
Options indicate an action to be performed:
.Bl -tag -width indent
+.It Fl a
+Read a command file and performs the
+specified actions for each device/file pair.
.It Fl c
-Configures the device.
+Configure the device.
If successful, references to
.Ar special_file
will access the contents of
.Ar regular_file .
+.It Fl d
+Disable (if possible) the specified feature.
.It Fl e
-Configures the device and enables any
+Configure the device and enables any
.Ar feature
that was specified.
If no feature was specified,
.Fl e
is the same as
.Fl c .
-.It Fl d
-Disables (if possible) the specified feature.
+.It Fl f Ar config_file
+Use
+.Ar config_file
+as an alternate config file.
+.It Fl g
+Fiddle global options.
+.It Fl r Ar option
+Reset
+.Ar option .
+.Ar Option
+is one of labels, follow, debug, io, all, none.
+.It Fl s Ar option
+Set
+.Ar option .
.It Fl u
-Disables and ``unconfigures'' the device.
+Disable and ``unconfigure'' the device.
.It Fl v
Print messages to stdout describing actions taken.
.El
@@ -115,15 +136,6 @@ See
Same as ``mountrw=''.
.El
.Pp
-The second (
-.Fl a
-) form of the command reads a command file and performs the
-specified actions for each device/file pair.
-With
-.Fl f
-it reads the indicated configuration file
-.Ar config_file .
-Otherwise it uses a default configuration file.
A configuration file contains one line per device/file pair in the form:
.Bd -literal
special_file regular_file [ feature ]
diff --git a/usr.sbin/vnconfig/vnconfig.c b/usr.sbin/vnconfig/vnconfig.c
index 0f112cf..de84988 100644
--- a/usr.sbin/vnconfig/vnconfig.c
+++ b/usr.sbin/vnconfig/vnconfig.c
@@ -36,12 +36,22 @@
* SUCH DAMAGE.
*
* from: Utah $Hdr: vnconfig.c 1.1 93/12/15$
- *
- * @(#)vnconfig.c 8.1 (Berkeley) 12/15/93
*/
-#include <stdio.h>
+#ifndef lint
+#if 0
+static char sccsid[] = "@(#)vnconfig.c 8.1 (Berkeley) 12/15/93";
+#endif
+static const char rcsid[] =
+ "$Id$";
+#endif /* not lint */
+
+#include <err.h>
#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/mount.h>
@@ -78,19 +88,21 @@ int global = 0;
u_long setopt = 0;
u_long resetopt = 0;
char *configfile;
-char *pname;
-char *malloc(), *rawdevice(), *rindex();
+int config __P((struct vndisk *));
+void getoptions __P((struct vndisk *, char *));
+char *rawdevice __P((char *));
+void readconfig __P((int));
+static void usage __P((void));
+int what_opt __P((char *, u_long *));
+int
main(argc, argv)
char **argv;
{
- extern int optind, optopt, opterr;
- extern char *optarg;
register int i, rv;
int flags = 0;
- pname = argv[0];
configfile = _PATH_VNTAB;
while ((i = getopt(argc, argv, "acdef:gr:s:uv")) != -1)
switch (i) {
@@ -130,21 +142,15 @@ main(argc, argv)
/* reset options */
case 'r':
- if (what_opt(optarg,&resetopt)) {
- fprintf(stderr,"Invalid options '%s'\n",
- optarg);
- usage();
- }
+ if (what_opt(optarg,&resetopt))
+ errx(1, "invalid options '%s'", optarg);
flags |= VN_RESET;
break;
/* set options */
case 's':
- if (what_opt(optarg,&setopt)) {
- fprintf(stderr,"Invalid options '%s'\n",
- optarg);
- usage();
- }
+ if (what_opt(optarg,&setopt))
+ errx(1, "invalid options '%s'", optarg);
flags |= VN_SET;
break;
@@ -160,7 +166,6 @@ main(argc, argv)
break;
default:
- fprintf(stderr, "invalid option '%c'\n", optopt);
usage();
}
@@ -198,6 +203,7 @@ what_opt(str,p)
return 1;
}
+int
config(vnp)
struct vndisk *vnp;
{
@@ -207,7 +213,6 @@ config(vnp)
register int rv;
char *rdev;
FILE *f;
- extern int errno;
u_long l;
dev = vnp->dev;
@@ -221,7 +226,7 @@ config(vnp)
rdev = rawdevice(dev);
f = fopen(rdev, "rw");
if (f == NULL) {
- perror("open");
+ warn("open");
return(1);
}
vnio.vn_file = file;
@@ -236,7 +241,7 @@ config(vnp)
if (errno == EBUSY)
flags &= ~VN_UNCONFIG;
if ((flags & VN_UNCONFIG) == 0)
- perror("umount");
+ warn("umount");
} else if (verbose)
printf("%s: unmounted\n", dev);
}
@@ -252,7 +257,7 @@ config(vnp)
printf("%s: not configured\n", dev);
rv = 0;
} else
- perror("VNIOCDETACH");
+ warn("VNIOCDETACH");
} else if (verbose)
printf("%s: cleared\n", dev);
}
@@ -262,7 +267,7 @@ config(vnp)
if (flags & VN_CONFIG) {
rv = ioctl(fileno(f), VNIOCATTACH, &vnio);
if (rv) {
- perror("VNIOCATTACH");
+ warn("VNIOCATTACH");
flags &= ~VN_ENABLE;
} else if (verbose)
printf("%s: %d bytes on %s\n",
@@ -278,7 +283,7 @@ config(vnp)
else
rv = ioctl(fileno(f), VNIOCUSET, &l);
if (rv) {
- perror("VNIO[GU]SET");
+ warn("VNIO[GU]SET");
} else if (verbose)
printf("%s: flags now=%08x\n",dev,l);
}
@@ -292,7 +297,7 @@ config(vnp)
else
rv = ioctl(fileno(f), VNIOCUCLEAR, &l);
if (rv) {
- perror("VNIO[GU]CLEAR");
+ warn("VNIO[GU]CLEAR");
} else if (verbose)
printf("%s: flags now=%08x\n",dev,l);
}
@@ -304,7 +309,7 @@ config(vnp)
if (flags & VN_SWAP) {
rv = swapon(dev);
if (rv)
- perror("swapon");
+ warn("swapon");
else if (verbose)
printf("%s: swapping enabled\n", dev);
}
@@ -316,12 +321,12 @@ config(vnp)
mflags = (flags & VN_MOUNTRO) ? MNT_RDONLY : 0;
rv = mount("ufs", oarg, mflags, &args);
if (rv)
- perror("mount");
+ warn("mount");
else if (verbose)
printf("%s: mounted on %s\n", dev, oarg);
}
}
-done:
+/* done: */
fclose(f);
fflush(stdout);
return(rv < 0);
@@ -330,6 +335,7 @@ done:
#define EOL(c) ((c) == '\0' || (c) == '\n')
#define WHITE(c) ((c) == ' ' || (c) == '\t' || (c) == '\n')
+void
readconfig(flags)
int flags;
{
@@ -339,10 +345,8 @@ readconfig(flags)
register int ix;
f = fopen(configfile, "r");
- if (f == NULL) {
- perror(configfile);
- exit(1);
- }
+ if (f == NULL)
+ err(1, "%s", configfile);
ix = 0;
while (fgets(buf, LINESIZE, f) != NULL) {
cp = buf;
@@ -385,6 +389,7 @@ readconfig(flags)
}
}
+void
getoptions(vnp, fstr)
struct vndisk *vnp;
char *fstr;
@@ -435,10 +440,10 @@ rawdevice(dev)
return (rawbuf);
}
+static void
usage()
{
- fprintf(stderr, "usage: %s [-acdefguv] [-s option] [-r option] [special-device file]\n",
- pname);
- fprintf(stderr, "\toptions: labels, follow, debug, io, all, none\n");
+ fprintf(stderr,
+"usage: vnconfig [-acdefguv] [-s option] [-r option] [special-device file]\n");
exit(1);
}
OpenPOWER on IntegriCloud