Don't print device name on failure
authorkn <kn@openbsd.org>
Thu, 1 Sep 2022 01:52:08 +0000 (01:52 +0000)
committerkn <kn@openbsd.org>
Thu, 1 Sep 2022 01:52:08 +0000 (01:52 +0000)
Noticed by mistake (wanted `-l'):
# vnconfig l
vnd0
vnconfig: VNDIOCSET: No such file or directory

Same happens if you try to load a bogus file:
# vnconfig ./empty
vnd0
vnconfig: VNDIOCSET: Input/output error

In both cases, the info on stdout is useless as vnd0 is not used.
Defer printing the device until after the file is set up:
# ./obj/vnconfig l
vnconfig: VNDIOCSET: No such file or directory
# ./obj/vnconfig ./empty
vnconfig: VNDIOCSET: Input/output error

OK deraadt

sbin/vnconfig/vnconfig.c

index be80f28..9ed7f8f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: vnconfig.c,v 1.10 2022/08/20 06:39:24 kn Exp $        */
+/*     $OpenBSD: vnconfig.c,v 1.11 2022/09/01 01:52:08 kn Exp $        */
 /*
  * Copyright (c) 1993 University of Utah.
  * Copyright (c) 1990, 1993
@@ -289,7 +289,6 @@ config(char *file, char *dev, struct disklabel *dp, char *key, size_t keylen)
        if (dev == NULL) {
                if (getinfo(NULL, &unit) == -1)
                        err(1, "no devices available");
-               printf("vnd%d\n", unit);
                asprintf(&dev, "vnd%d", unit);
        }
 
@@ -312,9 +311,12 @@ config(char *file, char *dev, struct disklabel *dp, char *key, size_t keylen)
        rv = ioctl(fd, VNDIOCSET, &vndio);
        if (rv)
                warn("VNDIOCSET");
-       else if (verbose)
-               fprintf(stderr, "%s: %llu bytes on %s\n", dev, vndio.vnd_size,
-                   file);
+       else {
+               printf("%s\n", dev);
+               if (verbose)
+                       fprintf(stderr, "%s: %llu bytes on %s\n", dev,
+                           vndio.vnd_size, file);
+       }
 
        close(fd);
        fflush(stdout);