Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F140826326
D37336.id113702.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D37336.id113702.diff
View Options
diff --git a/stand/efi/libefi/devicename.c b/stand/efi/libefi/devicename.c
--- a/stand/efi/libefi/devicename.c
+++ b/stand/efi/libefi/devicename.c
@@ -118,11 +118,7 @@
#ifdef EFI_ZFS_BOOT
case DEVT_ZFS:
- idev = malloc(sizeof(struct zfs_devdesc));
- if (idev == NULL)
- return (ENOMEM);
-
- err = zfs_parsedev((struct zfs_devdesc*)idev, np, path);
+ err = zfs_parsedev(&idev, np, path);
if (err != 0)
goto fail;
break;
diff --git a/stand/i386/libi386/devicename.c b/stand/i386/libi386/devicename.c
--- a/stand/i386/libi386/devicename.c
+++ b/stand/i386/libi386/devicename.c
@@ -119,11 +119,7 @@
break;
case DEVT_ZFS:
- idev = malloc(sizeof (struct zfs_devdesc));
- if (idev == NULL)
- return (ENOMEM);
-
- err = zfs_parsedev((struct zfs_devdesc *)idev, np, path);
+ err = zfs_parsedev((struct devdesc **)&idev, np, path);
if (err != 0)
goto fail;
break;
diff --git a/stand/libofw/devicename.c b/stand/libofw/devicename.c
--- a/stand/libofw/devicename.c
+++ b/stand/libofw/devicename.c
@@ -113,9 +113,9 @@
idev->dd.d_dev = dv;
if (dv->dv_type == DEVT_ZFS) {
p = devspec + strlen(dv->dv_name);
- err = zfs_parsedev((struct zfs_devdesc *)idev, p, path);
+ free(idev);
+ err = zfs_parsedev((struct devdesc **)&idev, p, path);
if (err != 0) {
- free(idev);
return (err);
}
}
diff --git a/stand/libsa/zfs/devicename_stubs.c b/stand/libsa/zfs/devicename_stubs.c
--- a/stand/libsa/zfs/devicename_stubs.c
+++ b/stand/libsa/zfs/devicename_stubs.c
@@ -32,7 +32,7 @@
__attribute__((weak))
int
-zfs_parsedev(struct zfs_devdesc *dev, const char *devspec, const char **path)
+zfs_parsedev(struct devdesc **dev, const char *devspec, const char **path)
{
return (EINVAL);
}
diff --git a/stand/libsa/zfs/libzfs.h b/stand/libsa/zfs/libzfs.h
--- a/stand/libsa/zfs/libzfs.h
+++ b/stand/libsa/zfs/libzfs.h
@@ -48,7 +48,7 @@
uint64_t root_guid;
};
-int zfs_parsedev(struct zfs_devdesc *dev, const char *devspec,
+int zfs_parsedev(struct devdesc **dev, const char *devspec,
const char **path);
char *zfs_fmtdev(struct devdesc *);
int zfs_probe_dev(const char *devname, uint64_t *pool_guid);
diff --git a/stand/libsa/zfs/zfs.c b/stand/libsa/zfs/zfs.c
--- a/stand/libsa/zfs/zfs.c
+++ b/stand/libsa/zfs/zfs.c
@@ -382,13 +382,8 @@
int rv;
errno = 0;
- zfsdev = malloc(sizeof(*zfsdev));
- if (zfsdev == NULL)
- return (errno);
-
- rv = zfs_parsedev(zfsdev, dev + 3, NULL);
+ rv = zfs_parsedev((struct devdesc **)&zfsdev, dev + 3, NULL);
if (rv != 0) {
- free(zfsdev);
return (rv);
}
@@ -1634,7 +1629,7 @@
};
int
-zfs_parsedev(struct zfs_devdesc *dev, const char *devspec, const char **path)
+zfs_parsedev(struct devdesc **idev, const char *devspec, const char **path)
{
static char rootname[ZFS_MAXNAMELEN];
static char poolname[ZFS_MAXNAMELEN];
@@ -1643,6 +1638,7 @@
const char *np;
const char *sep;
int rv;
+ struct zfs_devdesc *dev;
np = devspec;
if (*np != ':')
@@ -1667,13 +1663,19 @@
spa = spa_find_by_name(poolname);
if (!spa)
return (ENXIO);
+ dev = malloc(sizeof(*dev));
+ if (dev == NULL)
+ return (ENOMEM);
dev->pool_guid = spa->spa_guid;
rv = zfs_lookup_dataset(spa, rootname, &dev->root_guid);
- if (rv != 0)
+ if (rv != 0) {
+ free(dev);
return (rv);
+ }
if (path != NULL)
*path = (*end == '\0') ? end : end + 1;
dev->dd.d_dev = &zfs_dev;
+ *idev = &dev->dd;
return (0);
}
diff --git a/stand/userboot/userboot/devicename.c b/stand/userboot/userboot/devicename.c
--- a/stand/userboot/userboot/devicename.c
+++ b/stand/userboot/userboot/devicename.c
@@ -151,8 +151,8 @@
case DEVT_ZFS:
#if defined(USERBOOT_ZFS_SUPPORT)
- /* XXX assumes sizeof disk_devdesc >= sizeof zfs_devdesc */
- err = zfs_parsedev((struct zfs_devdesc *)idev, np, path);
+ free(idev);
+ err = zfs_parsedev(&idev, np, path);
if (err != 0)
goto fail;
break;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Dec 29, 12:52 PM (2 h, 29 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27360115
Default Alt Text
D37336.id113702.diff (3 KB)
Attached To
Mode
D37336: stand: Change zfs_parsedev() API
Attached
Detach File
Event Timeline
Log In to Comment