In d52ebfd8e572596739b84b5138ef7c090a3dc442
(https://marc.info/?t=166199571100001), vnconfig was changed to not print an
auto-allocated device on errors, however it now prints it unconditionally,
including when passed as an argument. One might consider this superfluous, but
it is surely contrary to the manual.
# dd if=/dev/zero of=/tmp/test.img bs=1m count=0 seek=1
0+0 records in
0+0 records out
0 bytes transferred in 0.000 secs (0 bytes/sec)
# vnconfig /tmp/test.img
vnd0
# vnconfig -u vnd0
# vnconfig vnd0 /tmp/test.img
vnd0
Two patches are below, one to change the printing to auto-allocation only, and
the other to update the manual to reflect the current behavior. I suggest
either or neither, but not both. Thanks.
Brian Conway
Lead Software Engineer, Owner
RCE Software, LLC
Index: vnconfig.8
===================================================================
RCS file: /cvs/src/sbin/vnconfig/vnconfig.8,v
retrieving revision 1.7
diff -u -p -u -p -r1.7 vnconfig.8
--- vnconfig.8 16 Aug 2022 13:59:51 -0000 1.7
+++ vnconfig.8 3 Oct 2022 15:52:31 -0000
@@ -83,7 +83,7 @@ with the regular file
allowing the latter to be accessed as though it were a disk.
If
.Ar vnd_dev
-is not specified, an unused one will be allocated and the name printed
+is not specified, an unused one will be allocated. The name is printed
to
.Va stdout .
.Pp
@@ -147,6 +147,7 @@ Configure a CD-ROM or DVD image file as
and mount the ISO 9660 file system contained in it:
.Bd -literal -offset indent
# vnconfig vnd0 /tmp/diskimage
+vnd0
# mount -t cd9660 /dev/vnd0c /mnt
.Ed
.Pp
@@ -160,6 +161,7 @@ a salt file with 20000 rounds:
# vnconfig -K 20000 vnd0 /tmp/cryptimg
Encryption key:
Salt file: /tmp/cryptsalt
+vnd0
# mount /dev/vnd0a /mnt
.Ed
.Sh SEE ALSO
Index: vnconfig.c
===================================================================
RCS file: /cvs/src/sbin/vnconfig/vnconfig.c,v
retrieving revision 1.11
diff -u -p -u -p -r1.11 vnconfig.c
--- vnconfig.c 1 Sep 2022 01:52:08 -0000 1.11
+++ vnconfig.c 3 Oct 2022 15:52:31 -0000
@@ -284,11 +284,12 @@ config(char *file, char *dev, struct dis
struct vnd_ioctl vndio;
char *rdev;
int fd, rv = -1;
- int unit;
+ int unit, print_dev = 0;
if (dev == NULL) {
if (getinfo(NULL, &unit) == -1)
err(1, "no devices available");
+ print_dev = 1;
asprintf(&dev, "vnd%d", unit);
}
@@ -312,7 +313,8 @@ config(char *file, char *dev, struct dis
if (rv)
warn("VNDIOCSET");
else {
- printf("%s\n", dev);
+ if (print_dev)
+ printf("%s\n", dev);
if (verbose)
fprintf(stderr, "%s: %llu bytes on %s\n", dev,
vndio.vnd_size, file);