Message ID | 20201231224853.1431364-6-sean.anderson@seco.com |
---|---|
State | Superseded |
Delegated to: | Tom Rini |
Headers | show |
Series | This series adds support for flashing eMMC boot partitions, and for | expand |
On Thu, 31 Dec 2020 at 15:49, Sean Anderson <sean.anderson@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.anderson@seco.com> > --- > > disk/part.c | 32 +++++++++++++++++--------------- > 1 file changed, 17 insertions(+), 15 deletions(-) Reviewed-by: Simon Glass <sjg@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 >
On 1/7/21 7:35 AM, Simon Glass wrote: > On Thu, 31 Dec 2020 at 15:49, Sean Anderson <sean.anderson@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.anderson@seco.com> >> --- >> >> disk/part.c | 32 +++++++++++++++++--------------- >> 1 file changed, 17 insertions(+), 15 deletions(-) > > Reviewed-by: Simon Glass <sjg@chromium.org> > > 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, &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 >>
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; }
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.anderson@seco.com> --- disk/part.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-)