Message ID | 1415181256-30569-1-git-send-email-l.majewski@samsung.com |
---|---|
State | Accepted |
Delegated to: | Łukasz Majewski |
Headers | show |
Hi Lukasz, > Recently the ext4 file system imposed passing absolute path with its > file name parameter. > As a result dfu_alt_info env variable has been modified to provide > absolute path when ext4 file system is accessed (e.g. /uImage ext4 0 > 2;). > > Unfortunately, lthor flashing program provides plain file name (like > uImage) and hence those two file names do not match anymore. > > Presented commit also allows lthor to write files to sub directories > (like /boot/bin/uImage). > > Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> > Reviewed-by: Marek Vasut <marex@denx.de> > --- > Changes for v2: > - Fix patch to path in comment > --- > drivers/dfu/dfu.c | 29 +++++++++++++++++++++++++++-- > 1 file changed, 27 insertions(+), 2 deletions(-) > > diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c > index 55e6a83..deafda2 100644 > --- a/drivers/dfu/dfu.c > +++ b/drivers/dfu/dfu.c > @@ -544,10 +544,35 @@ struct dfu_entity *dfu_get_entity(int alt) > int dfu_get_alt(char *name) > { > struct dfu_entity *dfu; > + char *str; > > list_for_each_entry(dfu, &dfu_list, list) { > - if (!strncmp(dfu->name, name, strlen(dfu->name))) > - return dfu->alt; > + if (dfu->name[0] != '/') { > + if (!strncmp(dfu->name, name, > strlen(dfu->name))) > + return dfu->alt; > + } else { > + /* > + * One must also consider absolute path > + * (/boot/bin/uImage) available at dfu->name > when > + * compared "plain" file name (uImage) > + * > + * It is the case for e.g. thor gadget where > lthor SW > + * sends only the file name, so only the > very last part > + * of path must be checked for equality > + */ > + > + str = strstr(dfu->name, name); > + if (!str) > + continue; > + > + /* > + * Check if matching substring is the last > element of > + * dfu->name (uImage) > + */ > + if (strlen(dfu->name) == > + ((str - dfu->name) + strlen(name))) > + return dfu->alt; > + } > } > > return -ENODEV; Applied to u-boot-dfu repository. Thanks
On Friday, November 14, 2014 at 11:39:48 AM, Lukasz Majewski wrote: > Hi Lukasz, > > > Recently the ext4 file system imposed passing absolute path with its > > file name parameter. > > As a result dfu_alt_info env variable has been modified to provide > > absolute path when ext4 file system is accessed (e.g. /uImage ext4 0 > > 2;). > > > > Unfortunately, lthor flashing program provides plain file name (like > > uImage) and hence those two file names do not match anymore. > > > > Presented commit also allows lthor to write files to sub directories > > (like /boot/bin/uImage). > > > > Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> > > Reviewed-by: Marek Vasut <marex@denx.de> [...] > > + * dfu->name (uImage) > > + */ > > + if (strlen(dfu->name) == > > + ((str - dfu->name) + strlen(name))) > > + return dfu->alt; > > + } > > > > } > > > > return -ENODEV; > > Applied to u-boot-dfu repository. Thanks It's nice to see that you're taking good care of your clones ;-) Best regards, Marek Vasut
diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c index 55e6a83..deafda2 100644 --- a/drivers/dfu/dfu.c +++ b/drivers/dfu/dfu.c @@ -544,10 +544,35 @@ struct dfu_entity *dfu_get_entity(int alt) int dfu_get_alt(char *name) { struct dfu_entity *dfu; + char *str; list_for_each_entry(dfu, &dfu_list, list) { - if (!strncmp(dfu->name, name, strlen(dfu->name))) - return dfu->alt; + if (dfu->name[0] != '/') { + if (!strncmp(dfu->name, name, strlen(dfu->name))) + return dfu->alt; + } else { + /* + * One must also consider absolute path + * (/boot/bin/uImage) available at dfu->name when + * compared "plain" file name (uImage) + * + * It is the case for e.g. thor gadget where lthor SW + * sends only the file name, so only the very last part + * of path must be checked for equality + */ + + str = strstr(dfu->name, name); + if (!str) + continue; + + /* + * Check if matching substring is the last element of + * dfu->name (uImage) + */ + if (strlen(dfu->name) == + ((str - dfu->name) + strlen(name))) + return dfu->alt; + } } return -ENODEV;