part: Give several functions more useful return values

Several functions in disk/part.c just return -1 on error. This makes them
return different errnos for different failures. This helps callers
differentiate between failures, even if they cannot read stdout.

Signed-off-by: Sean Anderson <sean.anderson@seco.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Sean Anderson 2021-02-05 09:38:55 -05:00 committed by Marek Vasut
parent d4f22cb39e
commit 59715754e1
1 changed files with 28 additions and 22 deletions

View File

@ -355,7 +355,7 @@ int part_get_info(struct blk_desc *dev_desc, int part,
}
#endif /* CONFIG_HAVE_BLOCK_DEVICE */
return -1;
return -ENOENT;
}
int part_get_info_whole_disk(struct blk_desc *dev_desc,
@ -417,7 +417,7 @@ int blk_get_device_by_str(const char *ifname, const char *dev_hwpart_str,
*dev_desc = get_dev_hwpart(ifname, dev, hwpart);
if (!(*dev_desc) || ((*dev_desc)->type == DEV_TYPE_UNKNOWN)) {
debug("** Bad device %s %s **\n", ifname, dev_hwpart_str);
dev = -ENOENT;
dev = -ENODEV;
goto cleanup;
}
@ -441,7 +441,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
struct blk_desc **dev_desc,
struct disk_partition *info, int allow_whole_dev)
{
int ret = -1;
int ret;
const char *part_str;
char *dup_str = NULL;
const char *dev_str;
@ -483,7 +483,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
if (0 == strcmp(ifname, "ubi")) {
if (!ubifs_is_mounted()) {
printf("UBIFS not mounted, use ubifsmount to mount volume first!\n");
return -1;
return -EINVAL;
}
*dev_desc = NULL;
@ -505,6 +505,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
/* If still no dev_part_str, it's an error */
if (!dev_part_str) {
printf("** No device specified **\n");
ret = -ENODEV;
goto cleanup;
}
@ -521,8 +522,10 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
/* Look up the device */
dev = blk_get_device_by_str(ifname, dev_str, dev_desc);
if (dev < 0)
if (dev < 0) {
ret = dev;
goto cleanup;
}
/* Convert partition ID string to number */
if (!part_str || !*part_str) {
@ -539,6 +542,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
if (*ep || (part == 0 && !allow_whole_dev)) {
printf("** Bad partition specification %s %s **\n",
ifname, dev_part_str);
ret = -ENOENT;
goto cleanup;
}
}
@ -552,6 +556,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
if (!(*dev_desc)->lba) {
printf("** Bad device size - %s %s **\n", ifname,
dev_str);
ret = -EINVAL;
goto cleanup;
}
@ -563,6 +568,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
if ((part > 0) || (!allow_whole_dev)) {
printf("** No partition table - %s %s **\n", ifname,
dev_str);
ret = -EPROTONOSUPPORT;
goto cleanup;
}
@ -631,7 +637,6 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
*info = tmpinfo;
} else {
printf("** No valid partitions found **\n");
ret = -1;
goto cleanup;
}
}
@ -639,7 +644,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
printf("** Invalid partition type \"%.32s\""
" (expect \"" BOOT_PART_TYPE "\")\n",
info->type);
ret = -1;
ret = -EINVAL;
goto cleanup;
}
@ -675,7 +680,7 @@ int part_get_info_by_name_type(struct blk_desc *dev_desc, const char *name,
}
}
return -1;
return -ENOENT;
}
int part_get_info_by_name(struct blk_desc *dev_desc, const char *name,
@ -705,7 +710,7 @@ static int part_get_info_by_dev_and_name(const char *dev_iface,
{
char *ep;
const char *part_str;
int dev_num;
int dev_num, ret;
part_str = strchr(dev_part_str, '#');
if (!part_str || part_str == dev_part_str)
@ -721,13 +726,12 @@ static int part_get_info_by_dev_and_name(const char *dev_iface,
*dev_desc = blk_get_dev(dev_iface, dev_num);
if (!*dev_desc) {
printf("Could not find %s %d\n", dev_iface, dev_num);
return -EINVAL;
return -ENODEV;
}
if (part_get_info_by_name(*dev_desc, part_str, part_info) < 0) {
ret = part_get_info_by_name(*dev_desc, part_str, part_info);
if (ret < 0)
printf("Could not find \"%s\" partition\n", part_str);
return -EINVAL;
}
return 0;
return ret;
}
int part_get_info_by_dev_and_name_or_num(const char *dev_iface,
@ -735,21 +739,23 @@ int part_get_info_by_dev_and_name_or_num(const char *dev_iface,
struct blk_desc **dev_desc,
struct disk_partition *part_info)
{
int ret;
/* Split the part_name if passed as "$dev_num#part_name". */
if (!part_get_info_by_dev_and_name(dev_iface, dev_part_str,
dev_desc, part_info))
return 0;
ret = part_get_info_by_dev_and_name(dev_iface, dev_part_str,
dev_desc, part_info);
if (ret >= 0)
return ret;
/*
* Couldn't lookup by name, try looking up the partition description
* directly.
*/
if (blk_get_device_part_str(dev_iface, dev_part_str,
dev_desc, part_info, 1) < 0) {
ret = blk_get_device_part_str(dev_iface, dev_part_str,
dev_desc, part_info, 1);
if (ret < 0)
printf("Couldn't find partition %s %s\n",
dev_iface, dev_part_str);
return -EINVAL;
}
return 0;
return ret;
}
void part_set_generic_name(const struct blk_desc *dev_desc,