Message ID | 20170902163806.27265-2-robdclark@gmail.com |
---|---|
State | Superseded |
Delegated to: | Tom Rini |
Headers | show |
Series | fs/fat: cleanups + readdir implementation | expand |
On 09/02/2017 06:37 PM, Rob Clark wrote: > Want to re-use this in fat dirent iterator in next patch. > > Signed-off-by: Rob Clark <robdclark@gmail.com> Reviewed-by: Łukasz Majewski <lukma@denx.de> > --- > fs/fat/fat.c | 73 +++++++++++++++++++++++++++++++++++------------------------ > include/fat.h | 1 + > 2 files changed, 44 insertions(+), 30 deletions(-) > > diff --git a/fs/fat/fat.c b/fs/fat/fat.c > index 465a6875ed..e1c0a15dc7 100644 > --- a/fs/fat/fat.c > +++ b/fs/fat/fat.c > @@ -808,35 +808,17 @@ exit: > return ret; > } > > -__u8 do_fat_read_at_block[MAX_CLUSTSIZE] > - __aligned(ARCH_DMA_MINALIGN); > - > -int do_fat_read_at(const char *filename, loff_t pos, void *buffer, > - loff_t maxsize, int dols, int dogetsize, loff_t *size) > +static int get_fs_info(fsdata *mydata) > { > - char fnamecopy[2048]; > boot_sector bs; > volume_info volinfo; > - fsdata datablock; > - fsdata *mydata = &datablock; > - dir_entry *dentptr = NULL; > - __u16 prevcksum = 0xffff; > - char *subname = ""; > - __u32 cursect; > - int idx, isdir = 0; > - int files = 0, dirs = 0; > - int ret = -1; > - int firsttime; > __u32 root_cluster = 0; > - __u32 read_blk; > - int rootdir_size = 0; > - int buffer_blk_cnt; > - int do_read; > - __u8 *dir_ptr; > + int ret; > > - if (read_bootsectandvi(&bs, &volinfo, &mydata->fatsize)) { > + ret = read_bootsectandvi(&bs, &volinfo, &mydata->fatsize); > + if (ret) { > debug("Error: reading boot sector\n"); > - return -1; > + return ret; > } > > if (mydata->fatsize == 32) { > @@ -848,8 +830,7 @@ int do_fat_read_at(const char *filename, loff_t pos, void *buffer, > > mydata->fat_sect = bs.reserved; > > - cursect = mydata->rootdir_sect > - = mydata->fat_sect + mydata->fatlength * bs.fats; > + mydata->rootdir_sect = mydata->fat_sect + mydata->fatlength * bs.fats; > > mydata->sect_size = (bs.sector_size[1] << 8) + bs.sector_size[0]; > mydata->clust_size = bs.cluster_size; > @@ -863,12 +844,12 @@ int do_fat_read_at(const char *filename, loff_t pos, void *buffer, > mydata->data_begin = mydata->rootdir_sect - > (mydata->clust_size * 2); > } else { > - rootdir_size = ((bs.dir_entries[1] * (int)256 + > - bs.dir_entries[0]) * > - sizeof(dir_entry)) / > - mydata->sect_size; > + mydata->rootdir_size = ((bs.dir_entries[1] * (int)256 + > + bs.dir_entries[0]) * > + sizeof(dir_entry)) / > + mydata->sect_size; > mydata->data_begin = mydata->rootdir_sect + > - rootdir_size - > + mydata->rootdir_size - > (mydata->clust_size * 2); > } > > @@ -893,6 +874,38 @@ int do_fat_read_at(const char *filename, loff_t pos, void *buffer, > debug("Sector size: %d, cluster size: %d\n", mydata->sect_size, > mydata->clust_size); > > + return 0; > +} > + > +__u8 do_fat_read_at_block[MAX_CLUSTSIZE] > + __aligned(ARCH_DMA_MINALIGN); > + > +int do_fat_read_at(const char *filename, loff_t pos, void *buffer, > + loff_t maxsize, int dols, int dogetsize, loff_t *size) > +{ > + char fnamecopy[2048]; > + fsdata datablock; > + fsdata *mydata = &datablock; > + dir_entry *dentptr = NULL; > + __u16 prevcksum = 0xffff; > + char *subname = ""; > + __u32 cursect; > + int idx, isdir = 0; > + int files = 0, dirs = 0; > + int ret = -1; > + int firsttime; > + __u32 root_cluster = 0; > + __u32 read_blk; > + int rootdir_size = 0; > + int buffer_blk_cnt; > + int do_read; > + __u8 *dir_ptr; > + > + if (get_fs_info(mydata)) > + return -1; > + > + cursect = mydata->rootdir_sect; > + > /* "cwd" is always the root... */ > while (ISDIRDELIM(*filename)) > filename++; > diff --git a/include/fat.h b/include/fat.h > index 71879f01ca..6d3fc8e4a6 100644 > --- a/include/fat.h > +++ b/include/fat.h > @@ -174,6 +174,7 @@ typedef struct { > __u16 clust_size; /* Size of clusters in sectors */ > int data_begin; /* The sector of the first cluster, can be negative */ > int fatbufnum; /* Used by get_fatent, init to -1 */ > + int rootdir_size; > } fsdata; > > typedef int (file_detectfs_func)(void); >
On Sun, Sep 3, 2017 at 10:52 AM, Łukasz Majewski <lukma@denx.de> wrote: > On 09/02/2017 06:37 PM, Rob Clark wrote: >> >> Want to re-use this in fat dirent iterator in next patch. >> >> Signed-off-by: Rob Clark <robdclark@gmail.com> > > > Reviewed-by: Łukasz Majewski <lukma@denx.de> > thanks btw, is there some way to make get_maintainers.pl to find your @denx.de address instead of the @samsung address which bounces? (Sorry, I hadn't realized you had a new addr, so you were missed from CC on some of the patches, I think.) BR, -R
On 09/03/2017 05:47 PM, Rob Clark wrote: > On Sun, Sep 3, 2017 at 10:52 AM, Łukasz Majewski <lukma@denx.de> wrote: >> On 09/02/2017 06:37 PM, Rob Clark wrote: >>> >>> Want to re-use this in fat dirent iterator in next patch. >>> >>> Signed-off-by: Rob Clark <robdclark@gmail.com> >> >> >> Reviewed-by: Łukasz Majewski <lukma@denx.de> >> > > thanks > > btw, is there some way to make get_maintainers.pl to find your > @denx.de address instead of the @samsung address which bounces? > (Sorry, I hadn't realized you had a new addr, so you were missed from > CC on some of the patches, I think.) I've updated git-mailrc entry (about which I've forgotten). However, get_maintainer looks for people making changes to the file(s) to which patch is applied. Hence, you see my old address. > > BR, > -R >
Hi Rob, On 3 September 2017 at 00:37, Rob Clark <robdclark@gmail.com> wrote: > Want to re-use this in fat dirent iterator in next patch. > > Signed-off-by: Rob Clark <robdclark@gmail.com> > --- > fs/fat/fat.c | 73 +++++++++++++++++++++++++++++++++++------------------------ > include/fat.h | 1 + > 2 files changed, 44 insertions(+), 30 deletions(-) > Reviewed-by: Simon Glass <sjg@chromium.org> But please add a comment to the new structure memory you added.
diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 465a6875ed..e1c0a15dc7 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -808,35 +808,17 @@ exit: return ret; } -__u8 do_fat_read_at_block[MAX_CLUSTSIZE] - __aligned(ARCH_DMA_MINALIGN); - -int do_fat_read_at(const char *filename, loff_t pos, void *buffer, - loff_t maxsize, int dols, int dogetsize, loff_t *size) +static int get_fs_info(fsdata *mydata) { - char fnamecopy[2048]; boot_sector bs; volume_info volinfo; - fsdata datablock; - fsdata *mydata = &datablock; - dir_entry *dentptr = NULL; - __u16 prevcksum = 0xffff; - char *subname = ""; - __u32 cursect; - int idx, isdir = 0; - int files = 0, dirs = 0; - int ret = -1; - int firsttime; __u32 root_cluster = 0; - __u32 read_blk; - int rootdir_size = 0; - int buffer_blk_cnt; - int do_read; - __u8 *dir_ptr; + int ret; - if (read_bootsectandvi(&bs, &volinfo, &mydata->fatsize)) { + ret = read_bootsectandvi(&bs, &volinfo, &mydata->fatsize); + if (ret) { debug("Error: reading boot sector\n"); - return -1; + return ret; } if (mydata->fatsize == 32) { @@ -848,8 +830,7 @@ int do_fat_read_at(const char *filename, loff_t pos, void *buffer, mydata->fat_sect = bs.reserved; - cursect = mydata->rootdir_sect - = mydata->fat_sect + mydata->fatlength * bs.fats; + mydata->rootdir_sect = mydata->fat_sect + mydata->fatlength * bs.fats; mydata->sect_size = (bs.sector_size[1] << 8) + bs.sector_size[0]; mydata->clust_size = bs.cluster_size; @@ -863,12 +844,12 @@ int do_fat_read_at(const char *filename, loff_t pos, void *buffer, mydata->data_begin = mydata->rootdir_sect - (mydata->clust_size * 2); } else { - rootdir_size = ((bs.dir_entries[1] * (int)256 + - bs.dir_entries[0]) * - sizeof(dir_entry)) / - mydata->sect_size; + mydata->rootdir_size = ((bs.dir_entries[1] * (int)256 + + bs.dir_entries[0]) * + sizeof(dir_entry)) / + mydata->sect_size; mydata->data_begin = mydata->rootdir_sect + - rootdir_size - + mydata->rootdir_size - (mydata->clust_size * 2); } @@ -893,6 +874,38 @@ int do_fat_read_at(const char *filename, loff_t pos, void *buffer, debug("Sector size: %d, cluster size: %d\n", mydata->sect_size, mydata->clust_size); + return 0; +} + +__u8 do_fat_read_at_block[MAX_CLUSTSIZE] + __aligned(ARCH_DMA_MINALIGN); + +int do_fat_read_at(const char *filename, loff_t pos, void *buffer, + loff_t maxsize, int dols, int dogetsize, loff_t *size) +{ + char fnamecopy[2048]; + fsdata datablock; + fsdata *mydata = &datablock; + dir_entry *dentptr = NULL; + __u16 prevcksum = 0xffff; + char *subname = ""; + __u32 cursect; + int idx, isdir = 0; + int files = 0, dirs = 0; + int ret = -1; + int firsttime; + __u32 root_cluster = 0; + __u32 read_blk; + int rootdir_size = 0; + int buffer_blk_cnt; + int do_read; + __u8 *dir_ptr; + + if (get_fs_info(mydata)) + return -1; + + cursect = mydata->rootdir_sect; + /* "cwd" is always the root... */ while (ISDIRDELIM(*filename)) filename++; diff --git a/include/fat.h b/include/fat.h index 71879f01ca..6d3fc8e4a6 100644 --- a/include/fat.h +++ b/include/fat.h @@ -174,6 +174,7 @@ typedef struct { __u16 clust_size; /* Size of clusters in sectors */ int data_begin; /* The sector of the first cluster, can be negative */ int fatbufnum; /* Used by get_fatent, init to -1 */ + int rootdir_size; } fsdata; typedef int (file_detectfs_func)(void);
Want to re-use this in fat dirent iterator in next patch. Signed-off-by: Rob Clark <robdclark@gmail.com> --- fs/fat/fat.c | 73 +++++++++++++++++++++++++++++++++++------------------------ include/fat.h | 1 + 2 files changed, 44 insertions(+), 30 deletions(-)