svn commit: r323867 - head/sys/boot/efi/libefi
Toomas Soome
tsoome at FreeBSD.org
Thu Sep 21 15:30:22 UTC 2017
Author: tsoome
Date: Thu Sep 21 15:30:20 2017
New Revision: 323867
URL: https://svnweb.freebsd.org/changeset/base/323867
Log:
libefi: devicename.c cleanups
Remove duplicated free()+return statements, default unit to 0
and improve strtol error processing.
Modified:
head/sys/boot/efi/libefi/devicename.c
Modified: head/sys/boot/efi/libefi/devicename.c
==============================================================================
--- head/sys/boot/efi/libefi/devicename.c Thu Sep 21 14:41:41 2017 (r323866)
+++ head/sys/boot/efi/libefi/devicename.c Thu Sep 21 15:30:20 2017 (r323867)
@@ -87,9 +87,9 @@ efi_parsedev(struct devdesc **dev, const char *devspec
{
struct devdesc *idev;
struct devsw *dv;
+ int i, unit, err;
char *cp;
const char *np;
- int i, err;
/* minimum length check */
if (strlen(devspec) < 2)
@@ -105,6 +105,7 @@ efi_parsedev(struct devdesc **dev, const char *devspec
return (ENOENT);
np = devspec + strlen(dv->dv_name);
+ idev = NULL;
err = 0;
switch (dv->dv_type) {
@@ -117,10 +118,8 @@ efi_parsedev(struct devdesc **dev, const char *devspec
return (ENOMEM);
err = disk_parsedev((struct disk_devdesc *)idev, np, path);
- if (err != 0) {
- free(idev);
- return (err);
- }
+ if (err != 0)
+ goto fail;
break;
#ifdef EFI_ZFS_BOOT
@@ -130,10 +129,8 @@ efi_parsedev(struct devdesc **dev, const char *devspec
return (ENOMEM);
err = zfs_parsedev((struct zfs_devdesc*)idev, np, path);
- if (err != 0) {
- free(idev);
- return (err);
- }
+ if (err != 0)
+ goto fail;
break;
#endif
default:
@@ -141,20 +138,23 @@ efi_parsedev(struct devdesc **dev, const char *devspec
if (idev == NULL)
return (ENOMEM);
- idev->d_unit = -1;
+ unit = 0;
cp = (char *)np;
+
if (*np != '\0' && *np != ':') {
- idev->d_unit = strtol(np, &cp, 0);
- if (cp == np) {
- free(idev);
- return (EUNIT);
+ errno = 0;
+ unit = strtol(np, &cp, 0);
+ if (errno != 0 || cp == np) {
+ err = EUNIT;
+ goto fail;
}
}
if (*cp != '\0' && *cp != ':') {
- free(idev);
- return (EINVAL);
+ err = EINVAL;
+ goto fail;
}
+ idev->d_unit = unit;
if (path != NULL)
*path = (*cp == 0) ? cp : cp + 1;
break;
@@ -168,6 +168,10 @@ efi_parsedev(struct devdesc **dev, const char *devspec
else
free(idev);
return (0);
+
+fail:
+ free(idev);
+ return (err);
}
char *
More information about the svn-src-all
mailing list