mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-06-09 23:36:03 +09:00
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:
parent
d4f22cb39e
commit
59715754e1
50
disk/part.c
50
disk/part.c
|
@ -355,7 +355,7 @@ int part_get_info(struct blk_desc *dev_desc, int part,
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_HAVE_BLOCK_DEVICE */
|
#endif /* CONFIG_HAVE_BLOCK_DEVICE */
|
||||||
|
|
||||||
return -1;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
int part_get_info_whole_disk(struct blk_desc *dev_desc,
|
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);
|
*dev_desc = get_dev_hwpart(ifname, dev, hwpart);
|
||||||
if (!(*dev_desc) || ((*dev_desc)->type == DEV_TYPE_UNKNOWN)) {
|
if (!(*dev_desc) || ((*dev_desc)->type == DEV_TYPE_UNKNOWN)) {
|
||||||
debug("** Bad device %s %s **\n", ifname, dev_hwpart_str);
|
debug("** Bad device %s %s **\n", ifname, dev_hwpart_str);
|
||||||
dev = -ENOENT;
|
dev = -ENODEV;
|
||||||
goto cleanup;
|
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 blk_desc **dev_desc,
|
||||||
struct disk_partition *info, int allow_whole_dev)
|
struct disk_partition *info, int allow_whole_dev)
|
||||||
{
|
{
|
||||||
int ret = -1;
|
int ret;
|
||||||
const char *part_str;
|
const char *part_str;
|
||||||
char *dup_str = NULL;
|
char *dup_str = NULL;
|
||||||
const char *dev_str;
|
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 (0 == strcmp(ifname, "ubi")) {
|
||||||
if (!ubifs_is_mounted()) {
|
if (!ubifs_is_mounted()) {
|
||||||
printf("UBIFS not mounted, use ubifsmount to mount volume first!\n");
|
printf("UBIFS not mounted, use ubifsmount to mount volume first!\n");
|
||||||
return -1;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
*dev_desc = NULL;
|
*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 still no dev_part_str, it's an error */
|
||||||
if (!dev_part_str) {
|
if (!dev_part_str) {
|
||||||
printf("** No device specified **\n");
|
printf("** No device specified **\n");
|
||||||
|
ret = -ENODEV;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -521,8 +522,10 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
|
||||||
|
|
||||||
/* Look up the device */
|
/* Look up the device */
|
||||||
dev = blk_get_device_by_str(ifname, dev_str, dev_desc);
|
dev = blk_get_device_by_str(ifname, dev_str, dev_desc);
|
||||||
if (dev < 0)
|
if (dev < 0) {
|
||||||
|
ret = dev;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
/* Convert partition ID string to number */
|
/* Convert partition ID string to number */
|
||||||
if (!part_str || !*part_str) {
|
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)) {
|
if (*ep || (part == 0 && !allow_whole_dev)) {
|
||||||
printf("** Bad partition specification %s %s **\n",
|
printf("** Bad partition specification %s %s **\n",
|
||||||
ifname, dev_part_str);
|
ifname, dev_part_str);
|
||||||
|
ret = -ENOENT;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -552,6 +556,7 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
|
||||||
if (!(*dev_desc)->lba) {
|
if (!(*dev_desc)->lba) {
|
||||||
printf("** Bad device size - %s %s **\n", ifname,
|
printf("** Bad device size - %s %s **\n", ifname,
|
||||||
dev_str);
|
dev_str);
|
||||||
|
ret = -EINVAL;
|
||||||
goto cleanup;
|
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)) {
|
if ((part > 0) || (!allow_whole_dev)) {
|
||||||
printf("** No partition table - %s %s **\n", ifname,
|
printf("** No partition table - %s %s **\n", ifname,
|
||||||
dev_str);
|
dev_str);
|
||||||
|
ret = -EPROTONOSUPPORT;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -631,7 +637,6 @@ int blk_get_device_part_str(const char *ifname, const char *dev_part_str,
|
||||||
*info = tmpinfo;
|
*info = tmpinfo;
|
||||||
} else {
|
} else {
|
||||||
printf("** No valid partitions found **\n");
|
printf("** No valid partitions found **\n");
|
||||||
ret = -1;
|
|
||||||
goto cleanup;
|
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\""
|
printf("** Invalid partition type \"%.32s\""
|
||||||
" (expect \"" BOOT_PART_TYPE "\")\n",
|
" (expect \"" BOOT_PART_TYPE "\")\n",
|
||||||
info->type);
|
info->type);
|
||||||
ret = -1;
|
ret = -EINVAL;
|
||||||
goto cleanup;
|
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,
|
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;
|
char *ep;
|
||||||
const char *part_str;
|
const char *part_str;
|
||||||
int dev_num;
|
int dev_num, ret;
|
||||||
|
|
||||||
part_str = strchr(dev_part_str, '#');
|
part_str = strchr(dev_part_str, '#');
|
||||||
if (!part_str || part_str == 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);
|
*dev_desc = blk_get_dev(dev_iface, dev_num);
|
||||||
if (!*dev_desc) {
|
if (!*dev_desc) {
|
||||||
printf("Could not find %s %d\n", dev_iface, dev_num);
|
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);
|
printf("Could not find \"%s\" partition\n", part_str);
|
||||||
return -EINVAL;
|
return ret;
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int part_get_info_by_dev_and_name_or_num(const char *dev_iface,
|
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 blk_desc **dev_desc,
|
||||||
struct disk_partition *part_info)
|
struct disk_partition *part_info)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* Split the part_name if passed as "$dev_num#part_name". */
|
/* Split the part_name if passed as "$dev_num#part_name". */
|
||||||
if (!part_get_info_by_dev_and_name(dev_iface, dev_part_str,
|
ret = part_get_info_by_dev_and_name(dev_iface, dev_part_str,
|
||||||
dev_desc, part_info))
|
dev_desc, part_info);
|
||||||
return 0;
|
if (ret >= 0)
|
||||||
|
return ret;
|
||||||
/*
|
/*
|
||||||
* Couldn't lookup by name, try looking up the partition description
|
* Couldn't lookup by name, try looking up the partition description
|
||||||
* directly.
|
* directly.
|
||||||
*/
|
*/
|
||||||
if (blk_get_device_part_str(dev_iface, dev_part_str,
|
ret = blk_get_device_part_str(dev_iface, dev_part_str,
|
||||||
dev_desc, part_info, 1) < 0) {
|
dev_desc, part_info, 1);
|
||||||
|
if (ret < 0)
|
||||||
printf("Couldn't find partition %s %s\n",
|
printf("Couldn't find partition %s %s\n",
|
||||||
dev_iface, dev_part_str);
|
dev_iface, dev_part_str);
|
||||||
return -EINVAL;
|
return ret;
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void part_set_generic_name(const struct blk_desc *dev_desc,
|
void part_set_generic_name(const struct blk_desc *dev_desc,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user