[v2,14/23] fs: fat: remember the starting cluster number of directory

Message ID 20180904074948.18146-15-takahiro.akashi@linaro.org
State New
Headers show
Series
  • subject: fs: fat: extend FAT write operations
Related show

Commit Message

AKASHI Takahiro Sept. 4, 2018, 7:49 a.m.
The starting cluster number of directory is needed to initialize ".."
(parent directory) entry when creating a new directory.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
---
 fs/fat/fat.c  | 2 ++
 include/fat.h | 1 +
 2 files changed, 3 insertions(+)

Patch

diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 50c2d4f3c33d..bbd4b098afb5 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -643,6 +643,7 @@  int fat_itr_root(fat_itr *itr, fsdata *fsdata)
 		return -ENXIO;
 
 	itr->fsdata = fsdata;
+	itr->start_clust = 0;
 	itr->clust = fsdata->root_cluster;
 	itr->next_clust = fsdata->root_cluster;
 	itr->dent = NULL;
@@ -678,6 +679,7 @@  void fat_itr_child(fat_itr *itr, fat_itr *parent)
 	assert(fat_itr_isdir(parent));
 
 	itr->fsdata = parent->fsdata;
+	itr->start_clust = clustnum;
 	if (clustnum > 0) {
 		itr->clust = clustnum;
 		itr->next_clust = clustnum;
diff --git a/include/fat.h b/include/fat.h
index 9b114e3cbda4..05a993bfdcfe 100644
--- a/include/fat.h
+++ b/include/fat.h
@@ -199,6 +199,7 @@  static inline u32 sect_to_clust(fsdata *fsdata, int sect)
 
 typedef struct {
 	fsdata    *fsdata;        /* filesystem parameters */
+	unsigned   start_clust;   /* first cluster */
 	unsigned   clust;         /* current cluster */
 	unsigned   next_clust;    /* next cluster if remaining == 0 */
 	int        last_cluster;  /* set once we've read last cluster */