Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sbin/ccdconfig Use raw device for configuring units. This is...



details:   https://anonhg.NetBSD.org/src/rev/fd1d7b71adaf
branches:  trunk
changeset: 940221:fd1d7b71adaf
user:      mlelstv <mlelstv%NetBSD.org@localhost>
date:      Tue Oct 06 18:47:07 2020 +0000

description:
Use raw device for configuring units. This is necessary as
having a block device opened prevents autodiscovery of wedges.

diffstat:

 sbin/ccdconfig/ccdconfig.c |  41 ++++++++++++++++++++++++++++-------------
 1 files changed, 28 insertions(+), 13 deletions(-)

diffs (76 lines):

diff -r 5547e7b4a08e -r fd1d7b71adaf sbin/ccdconfig/ccdconfig.c
--- a/sbin/ccdconfig/ccdconfig.c        Tue Oct 06 18:45:23 2020 +0000
+++ b/sbin/ccdconfig/ccdconfig.c        Tue Oct 06 18:47:07 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ccdconfig.c,v 1.57 2020/09/06 02:34:30 mrg Exp $       */
+/*     $NetBSD: ccdconfig.c,v 1.58 2020/10/06 18:47:07 mlelstv Exp $   */
 
 /*-
  * Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1996, 1997\
  The NetBSD Foundation, Inc.  All rights reserved.");
-__RCSID("$NetBSD: ccdconfig.c,v 1.57 2020/09/06 02:34:30 mrg Exp $");
+__RCSID("$NetBSD: ccdconfig.c,v 1.58 2020/10/06 18:47:07 mlelstv Exp $");
 #endif
 
 #include <sys/param.h>
@@ -391,24 +391,38 @@
 static char *
 resolve_ccdname(char *name)
 {
-       char c, *path;
+       char *path, *buf;
+       const char *p;
+       char c;
        size_t len;
        int rawpart;
 
        if (name[0] == '/' || name[0] == '.') {
                /* Assume they gave the correct pathname. */
-               return estrdup(name);
+               path = estrdup(name);
+       } else {
+
+               len = strlen(name);
+               c = name[len - 1];
+
+               if (isdigit((unsigned char)c)) {
+                       if ((rawpart = getrawpartition()) < 0)
+                               return NULL;
+                       easprintf(&path, "/dev/%s%c", name, 'a' + rawpart);
+               } else
+                       easprintf(&path, "/dev/%s", name);
        }
 
-       len = strlen(name);
-       c = name[len - 1];
-
-       if (isdigit((unsigned char)c)) {
-               if ((rawpart = getrawpartition()) < 0)
-                       return NULL;
-               easprintf(&path, "/dev/%s%c", name, 'a' + rawpart);
-       } else
-               easprintf(&path, "/dev/%s", name);
+       /*
+        * Convert to raw device if possible.
+        */
+       buf = emalloc(MAXPATHLEN);
+       p = getdiskrawname(buf, MAXPATHLEN, path);
+       if (p) {
+               free(path);
+               path = estrdup(p);
+       }
+       free(buf);
 
        return path;
 }
@@ -562,6 +576,7 @@
                        continue;
                }
                errs += printccdinfo(i);
+               free(ccd);
        }
        return errs;
 }



Home | Main Index | Thread Index | Old Index