part: Give several functions more useful return values
authorSean Anderson <sean.anderson@seco.com>
Fri, 5 Feb 2021 14:38:55 +0000 (09:38 -0500)
committerMarek Vasut <marex@denx.de>
Fri, 26 Feb 2021 14:30:55 +0000 (15:30 +0100)
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>
disk/part.c

index 85b1af5..2a6b85e 100644 (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,