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.ander...@seco.com>
Reviewed-by: Simon Glass <s...@chromium.org>
---

(no changes since v1)

 disk/part.c | 50 ++++++++++++++++++++++++++++----------------------
 1 file changed, 28 insertions(+), 22 deletions(-)

diff --git a/disk/part.c b/disk/part.c
index b69fd345f3..5e354e256f 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -354,7 +354,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,
@@ -416,7 +416,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;
        }
 
@@ -440,7 +440,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;
@@ -482,7 +482,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;
@@ -504,6 +504,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;
        }
 
@@ -520,8 +521,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) {
@@ -538,6 +541,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;
                }
        }
@@ -551,6 +555,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;
                }
 
@@ -562,6 +567,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;
                }
 
@@ -630,7 +636,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;
                }
        }
@@ -638,7 +643,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;
        }
 
@@ -674,7 +679,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,
@@ -704,7 +709,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)
@@ -720,13 +725,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,
@@ -734,21 +738,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,
-- 
2.25.1

Reply via email to