On Thu, 31 Dec 2020 at 15:49, Sean Anderson <sean.ander...@seco.com> 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 <sean.ander...@seco.com> > --- > > disk/part.c | 32 +++++++++++++++++--------------- > 1 file changed, 17 insertions(+), 15 deletions(-)
Reviewed-by: Simon Glass <s...@chromium.org> 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, &ep, 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 >