Module Name: src
Committed By: tls
Date: Sun Aug 10 06:52:34 UTC 2014
Modified Files:
src/lib/libutil [tls-earlyentropy]: getfsspecname.c
Log Message:
Rebase.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.4.6.1 src/lib/libutil/getfsspecname.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/libutil/getfsspecname.c
diff -u src/lib/libutil/getfsspecname.c:1.4 src/lib/libutil/getfsspecname.c:1.4.6.1
--- src/lib/libutil/getfsspecname.c:1.4 Tue Jan 1 18:32:17 2013
+++ src/lib/libutil/getfsspecname.c Sun Aug 10 06:52:34 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: getfsspecname.c,v 1.4 2013/01/01 18:32:17 dsl Exp $ */
+/* $NetBSD: getfsspecname.c,v 1.4.6.1 2014/08/10 06:52:34 tls Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: getfsspecname.c,v 1.4 2013/01/01 18:32:17 dsl Exp $");
+__RCSID("$NetBSD: getfsspecname.c,v 1.4.6.1 2014/08/10 06:52:34 tls Exp $");
#include <sys/types.h>
#include <sys/ioctl.h>
@@ -53,13 +53,12 @@ getfsspecname(char *buf, size_t bufsiz,
{
static const int mib[] = { CTL_HW, HW_DISKNAMES };
static const unsigned int miblen = __arraycount(mib);
- char *drives, *dk;
+ char *drives, *dk, *p;
size_t len;
- int fd, savee;
+ int fd, savee = errno;
char *vname;
- drives = NULL;
- vname = NULL;
+ p = drives = vname = NULL;
if (strncasecmp(name, "NAME=", 5) != 0) {
#ifdef COMPAT_DKWEDGE
/*
@@ -129,20 +128,28 @@ search:
}
(void)close(fd);
if (strcmp(vname, (char *)dkw.dkw_wname) == 0) {
- char *p = strstr(buf, "/rdk");
- if (p++ == NULL)
- return buf;
- strcpy(p, p + 1);
- free(drives);
- free(vname);
- return buf;
+ p = strstr(buf, "/rdk");
+ goto good;
}
}
+#ifdef COMPAT_DKWEDGE
+ /* Last ditch effort assuming NAME=label, and label is a disk name */
+ fd = opendisk(name, O_RDONLY, buf, bufsiz, 0);
+ if (fd != -1) {
+ close(fd);
+ p = strstr(buf, "/r");
+ goto good;
+ }
+#endif
savee = ESRCH;
snprintf(buf, bufsiz, "no match for `%s'", vname);
out:
+ buf = NULL;
+good:
+ if (p++ != NULL)
+ strcpy(p, p + 1);
free(drives);
free(vname);
errno = savee;
- return NULL;
+ return buf;
}