fs: fat: set start cluster for root directory
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 22 Nov 2020 15:04:47 +0000 (16:04 +0100)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Thu, 10 Dec 2020 08:14:59 +0000 (09:14 +0100)
When iterating over a child directory we set itr->start_clust.
Do the same when over the root directory.

When looking for deleted directory entries or existing short names we will
have to iterate over directories a second and third time. With this patch
we do not need any special logic for the root directory.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
fs/fat/fat.c

index 674236d..5a418cf 100644 (file)
@@ -734,7 +734,7 @@ static int fat_itr_root(fat_itr *itr, fsdata *fsdata)
                return -ENXIO;
 
        itr->fsdata = fsdata;
-       itr->start_clust = 0;
+       itr->start_clust = fsdata->root_cluster;
        itr->clust = fsdata->root_cluster;
        itr->next_clust = fsdata->root_cluster;
        itr->dent = NULL;
@@ -778,6 +778,7 @@ static void fat_itr_child(fat_itr *itr, fat_itr *parent)
        } else {
                itr->clust = parent->fsdata->root_cluster;
                itr->next_clust = parent->fsdata->root_cluster;
+               itr->start_clust = parent->fsdata->root_cluster;
                itr->is_root = 1;
        }
        itr->dent = NULL;
@@ -1067,6 +1068,7 @@ static int fat_itr_resolve(fat_itr *itr, const char *path, unsigned type)
                        /* point back to itself */
                        itr->clust = itr->fsdata->root_cluster;
                        itr->next_clust = itr->fsdata->root_cluster;
+                       itr->start_clust = itr->fsdata->root_cluster;
                        itr->dent = NULL;
                        itr->remaining = 0;
                        itr->last_cluster = 0;