On 07/20/2018 04:57 AM, AKASHI Takahiro wrote: > FAT's root directory does not have "." nor ".." > So care must be taken when scanning root directory with fat_itr_resolve(). > Without this patch, any file path starting with "." or ".." will not be > resolved at all. > > Signed-off-by: AKASHI Takahiro <takahiro.aka...@linaro.org> > --- > fs/fat/fat.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/fs/fat/fat.c b/fs/fat/fat.c > index b48f48a751..fd6523c66b 100644 > --- a/fs/fat/fat.c > +++ b/fs/fat/fat.c > @@ -927,6 +927,27 @@ static int fat_itr_resolve(fat_itr *itr, const char > *path, unsigned type) > while (next[0] && !ISDIRDELIM(next[0])) > next++; > > + if (itr->is_root) { > + /* root dir doesn't have "." nor ".." */
I understand why root has no ../ but /./ should be valid. On Linux 'ls /./' displays the root directory. Best regards Heinrich > + if ((((next - path) == 1) && !strncmp(path, ".", 1)) || > + (((next - path) == 2) && !strncmp(path, "..", 2))) { > + /* point back to itself */ > + itr->clust = itr->fsdata->root_cluster; > + itr->dent = NULL; > + itr->remaining = 0; > + itr->last_cluster = 0; > + > + if (next[0] == 0) { > + if (type & TYPE_DIR) > + return 0; > + else > + return -ENOENT; > + } > + > + return fat_itr_resolve(itr, next, type); > + } > + } > + > while (fat_itr_next(itr)) { > int match = 0; > unsigned n = max(strlen(itr->name), (size_t)(next - path)); > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot