Re: [PATCH 5/9] part: Support string block devices in part_get_info_by_dev_and_name

2021-01-07 Thread Sean Anderson




On 1/7/21 7:35 AM, Simon Glass wrote:

On Thu, 31 Dec 2020 at 15:49, Sean Anderson  wrote:


This adds support for things like "#partname" and "0.1#partname". The block
device parsing is done like in blk_get_device_part_str.

Signed-off-by: Sean Anderson 
---

  disk/part.c | 32 +---
  1 file changed, 17 insertions(+), 15 deletions(-)


Reviewed-by: Simon Glass 

Does the function comment need updating?


Yes. Will be updated.

--Sean






diff --git a/disk/part.c b/disk/part.c
index 39c6b00a59..e07dd67fd9 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -707,29 +707,31 @@ static int part_get_info_by_dev_and_name(const char 
*dev_iface,
  struct blk_desc **dev_desc,
  struct disk_partition *part_info)
  {
-   char *ep;
-   const char *part_str;
-   int dev_num, ret;
+   char *dup_str = NULL;
+   const char *dev_str, *part_str;
+   int ret;

+   /* Separate device and partition name specification */
 part_str = strchr(dev_part_str, '#');
-   if (!part_str || part_str == dev_part_str)
-   return -EINVAL;
-
-   dev_num = simple_strtoul(dev_part_str, , 16);
-   if (ep != part_str) {
-   /* Not all the first part before the # was parsed. */
+   if (part_str) {
+   dup_str = strdup(dev_part_str);
+   dup_str[part_str - dev_part_str] = 0;
+   dev_str = dup_str;
+   part_str++;
+   } else {
 return -EINVAL;
 }
-   part_str++;

-   *dev_desc = blk_get_dev(dev_iface, dev_num);
-   if (!*dev_desc) {
-   printf("Could not find %s %d\n", dev_iface, dev_num);
-   return -ENODEV;
-   }
+   ret = blk_get_device_by_str(dev_iface, dev_str, dev_desc);
+   if (ret)
+   goto cleanup;
+
 ret = part_get_info_by_name(*dev_desc, part_str, part_info);
 if (ret < 0)
 printf("Could not find \"%s\" partition\n", part_str);
+
+cleanup:
+   free(dup_str);
 return ret;
  }

--
2.25.1



Re: [PATCH 5/9] part: Support string block devices in part_get_info_by_dev_and_name

2021-01-07 Thread Simon Glass
On Thu, 31 Dec 2020 at 15:49, Sean Anderson  wrote:
>
> This adds support for things like "#partname" and "0.1#partname". The block
> device parsing is done like in blk_get_device_part_str.
>
> Signed-off-by: Sean Anderson 
> ---
>
>  disk/part.c | 32 +---
>  1 file changed, 17 insertions(+), 15 deletions(-)

Reviewed-by: Simon Glass 

Does the function comment need updating?


>
> diff --git a/disk/part.c b/disk/part.c
> index 39c6b00a59..e07dd67fd9 100644
> --- a/disk/part.c
> +++ b/disk/part.c
> @@ -707,29 +707,31 @@ static int part_get_info_by_dev_and_name(const char 
> *dev_iface,
>  struct blk_desc **dev_desc,
>  struct disk_partition *part_info)
>  {
> -   char *ep;
> -   const char *part_str;
> -   int dev_num, ret;
> +   char *dup_str = NULL;
> +   const char *dev_str, *part_str;
> +   int ret;
>
> +   /* Separate device and partition name specification */
> part_str = strchr(dev_part_str, '#');
> -   if (!part_str || part_str == dev_part_str)
> -   return -EINVAL;
> -
> -   dev_num = simple_strtoul(dev_part_str, , 16);
> -   if (ep != part_str) {
> -   /* Not all the first part before the # was parsed. */
> +   if (part_str) {
> +   dup_str = strdup(dev_part_str);
> +   dup_str[part_str - dev_part_str] = 0;
> +   dev_str = dup_str;
> +   part_str++;
> +   } else {
> return -EINVAL;
> }
> -   part_str++;
>
> -   *dev_desc = blk_get_dev(dev_iface, dev_num);
> -   if (!*dev_desc) {
> -   printf("Could not find %s %d\n", dev_iface, dev_num);
> -   return -ENODEV;
> -   }
> +   ret = blk_get_device_by_str(dev_iface, dev_str, dev_desc);
> +   if (ret)
> +   goto cleanup;
> +
> ret = part_get_info_by_name(*dev_desc, part_str, part_info);
> if (ret < 0)
> printf("Could not find \"%s\" partition\n", part_str);
> +
> +cleanup:
> +   free(dup_str);
> return ret;
>  }
>
> --
> 2.25.1
>