From: AKASHI Takahiro <takahiro.akashi@linaro.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 03/17] fs: fat: make directory iterator global for write use
Date: Mon, 23 Jul 2018 17:18:01 +0900 [thread overview]
Message-ID: <20180723081800.GS11258@linaro.org> (raw)
In-Reply-To: <20180723080645.GR11258@linaro.org>
On Mon, Jul 23, 2018 at 05:06:46PM +0900, AKASHI Takahiro wrote:
> On Fri, Jul 20, 2018 at 08:02:57PM +0200, Heinrich Schuchardt wrote:
> > On 07/20/2018 04:57 AM, AKASHI Takahiro wrote:
> > > Directory iterator was introduced in major re-work of read operation by
> > > Rob. We want to use it for write operation extensively as well.
> > > This patch makes relevant functions, as well as iterator defition, visible
> > > outside of fat.c.
> > >
> > > Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
> > > ---
> > > fs/fat/fat.c | 39 ++++++---------------------------------
> > > include/fat.h | 32 ++++++++++++++++++++++++++++++++
> > > 2 files changed, 38 insertions(+), 33 deletions(-)
> > >
> > > diff --git a/fs/fat/fat.c b/fs/fat/fat.c
> > > index fd6523c66b..0f82cbe1bd 100644
> > > --- a/fs/fat/fat.c
> > > +++ b/fs/fat/fat.c
> > > @@ -634,25 +634,6 @@ static int get_fs_info(fsdata *mydata)
> > > * For more complete example, see fat_itr_resolve()
> > > */
> > >
> > > -typedef struct {
> > > - fsdata *fsdata; /* filesystem parameters */
> > > - unsigned clust; /* current cluster */
> > > - int last_cluster; /* set once we've read last cluster */
> > > - int is_root; /* is iterator at root directory */
> > > - int remaining; /* remaining dent's in current cluster */
> > > -
> > > - /* current iterator position values: */
> > > - dir_entry *dent; /* current directory entry */
> > > - char l_name[VFAT_MAXLEN_BYTES]; /* long (vfat) name */
> > > - char s_name[14]; /* short 8.3 name */
> > > - char *name; /* l_name if there is one, else s_name */
> > > -
> > > - /* storage for current cluster in memory: */
> > > - u8 block[MAX_CLUSTSIZE] __aligned(ARCH_DMA_MINALIGN);
> > > -} fat_itr;
> > > -
> > > -static int fat_itr_isdir(fat_itr *itr);
> > > -
> > > /**
> > > * fat_itr_root() - initialize an iterator to start at the root
> > > * directory
> > > @@ -661,7 +642,7 @@ static int fat_itr_isdir(fat_itr *itr);
> > > * @fsdata: filesystem data for the partition
> > > * @return 0 on success, else -errno
> > > */
> > > -static int fat_itr_root(fat_itr *itr, fsdata *fsdata)
> > > +int fat_itr_root(fat_itr *itr, fsdata *fsdata)
> > > {
> > > if (get_fs_info(fsdata))
> > > return -ENXIO;
> > > @@ -693,7 +674,7 @@ static int fat_itr_root(fat_itr *itr, fsdata *fsdata)
> > > * @parent: the iterator pointing at a directory entry in the
> > > * parent directory of the directory to iterate
> > > */
> > > -static void fat_itr_child(fat_itr *itr, fat_itr *parent)
> > > +void fat_itr_child(fat_itr *itr, fat_itr *parent)
> > > {
> > > fsdata *mydata = parent->fsdata; /* for silly macros */
> > > unsigned clustnum = START(parent->dent);
> > > @@ -713,7 +694,7 @@ static void fat_itr_child(fat_itr *itr, fat_itr *parent)
> > > itr->last_cluster = 0;
> > > }
> > >
> > > -static void *next_cluster(fat_itr *itr)
> > > +void *next_cluster(fat_itr *itr)
> > > {
> > > fsdata *mydata = itr->fsdata; /* for silly macros */
> > > int ret;
> > > @@ -834,7 +815,7 @@ static dir_entry *extract_vfat_name(fat_itr *itr)
> > > * @return boolean, 1 if success or 0 if no more entries in the
> > > * current directory
> > > */
> > > -static int fat_itr_next(fat_itr *itr)
> > > +int fat_itr_next(fat_itr *itr)
> > > {
> > > dir_entry *dent;
> > >
> > > @@ -879,19 +860,11 @@ static int fat_itr_next(fat_itr *itr)
> > > * @itr: the iterator
> > > * @return true if cursor is at a directory
> > > */
> > > -static int fat_itr_isdir(fat_itr *itr)
> > > +int fat_itr_isdir(fat_itr *itr)
> > > {
> > > return !!(itr->dent->attr & ATTR_DIR);
> > > }
> > >
> > > -/*
> > > - * Helpers:
> > > - */
> > > -
> > > -#define TYPE_FILE 0x1
> > > -#define TYPE_DIR 0x2
> > > -#define TYPE_ANY (TYPE_FILE | TYPE_DIR)
> > > -
> > > /**
> > > * fat_itr_resolve() - traverse directory structure to resolve the
> > > * requested path.
> > > @@ -907,7 +880,7 @@ static int fat_itr_isdir(fat_itr *itr)
> > > * @type: bitmask of allowable file types
> > > * @return 0 on success or -errno
> > > */
> > > -static int fat_itr_resolve(fat_itr *itr, const char *path, unsigned type)
> > > +int fat_itr_resolve(fat_itr *itr, const char *path, unsigned type)
> > > {
> > > const char *next;
> > >
> > > diff --git a/include/fat.h b/include/fat.h
> > > index 0c88b59a4a..577e6b4592 100644
> > > --- a/include/fat.h
> > > +++ b/include/fat.h
> > > @@ -187,6 +187,38 @@ static inline u32 sect_to_clust(fsdata *fsdata, int sect)
> > > return (sect - fsdata->data_begin) / fsdata->clust_size;
> > > }
> > >
> > > +/*
> > > + * Directory iterator
> > > + */
> > > +
> > > +#define TYPE_FILE 0x1
> > > +#define TYPE_DIR 0x2
> > > +#define TYPE_ANY (TYPE_FILE | TYPE_DIR)
> >
> > Please, rename these to something more specific like FS_ITER_ANY.
> >
> > TYPE_ANY already is defined in fs/reiserfs/reiserfs_private.h:
> >
> > fs/reiserfs/reiserfs_private.h:160:#define TYPE_ANY 15
>
> Good catch though the definition above comes directly from Rob's
> original patch.
Oops, looking at the code closely, the duplication will never be hit
because reiserfs_private.h is a private header.
> Since there is only one occurrence of TYPE_ANY in fs/fat,
> I'd rather expand it without introducing another definition.
I will put this change on hold unless a maintainer sticks to this idea.
> Thanks,
> -Takahiro AKASHI
>
>
> > Best regards
> >
> > Heinrich
> >
> > > +
> > > +typedef struct {
> > > + fsdata *fsdata; /* filesystem parameters */
> > > + unsigned clust; /* current cluster */
> > > + int last_cluster; /* set once we've read last cluster */
> > > + int is_root; /* is iterator at root directory */
> > > + int remaining; /* remaining dent's in current cluster */
> > > +
> > > + /* current iterator position values: */
> > > + dir_entry *dent; /* current directory entry */
> > > + char l_name[VFAT_MAXLEN_BYTES]; /* long (vfat) name */
> > > + char s_name[14]; /* short 8.3 name */
> > > + char *name; /* l_name if there is one, else s_name */
> > > +
> > > + /* storage for current cluster in memory: */
> > > + u8 block[MAX_CLUSTSIZE] __aligned(ARCH_DMA_MINALIGN);
> > > +} fat_itr;
> > > +
> > > +int fat_itr_root(fat_itr *itr, fsdata *fsdata);
> > > +void fat_itr_child(fat_itr *itr, fat_itr *parent);
> > > +void *next_cluster(fat_itr *itr);
> > > +int fat_itr_next(fat_itr *itr);
> > > +int fat_itr_isdir(fat_itr *itr);
> > > +int fat_itr_resolve(fat_itr *itr, const char *path, unsigned type);
> > > +
> > > int file_fat_detectfs(void);
> > > int fat_exists(const char *filename);
> > > int fat_size(const char *filename, loff_t *size);
> > >
> >
next prev parent reply other threads:[~2018-07-23 8:18 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-20 2:57 [U-Boot] [PATCH 00/17] fs: fat: extend FAT write operations AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 01/17] fs: fat: extend get_fs_info() for write use AKASHI Takahiro
2018-07-20 18:06 ` Heinrich Schuchardt
2018-07-22 7:43 ` Heinrich Schuchardt
2018-07-20 2:57 ` [U-Boot] [PATCH 02/17] fs: fat: handle "." and ".." of root dir correctly with fat_itr_resolve() AKASHI Takahiro
2018-07-20 18:09 ` Heinrich Schuchardt
2018-07-23 7:55 ` AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 03/17] fs: fat: make directory iterator global for write use AKASHI Takahiro
2018-07-20 18:02 ` Heinrich Schuchardt
2018-07-23 8:06 ` AKASHI Takahiro
2018-07-23 8:18 ` AKASHI Takahiro [this message]
2018-08-11 13:34 ` Heinrich Schuchardt
2018-08-20 4:45 ` AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 04/17] fs: fat: assure iterator's ->dent belongs to ->clust AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 05/17] fs: fat: check and normailze file name AKASHI Takahiro
2018-07-31 4:31 ` Heinrich Schuchardt
2018-07-20 2:57 ` [U-Boot] [PATCH 06/17] fs: fat: write returns error code instead of -1 AKASHI Takahiro
2018-07-20 17:55 ` Heinrich Schuchardt
2018-07-23 8:32 ` AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 07/17] fs: fat: support write with sub-directory path AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 08/17] fs: fat: refactor write interface for a file offset AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 09/17] fs: fat: support write with non-zero offset AKASHI Takahiro
2018-07-20 17:46 ` Heinrich Schuchardt
2018-07-23 8:41 ` AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 10/17] cmd: fat: add offset parameter to fatwrite AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 11/17] fs: add mkdir interface AKASHI Takahiro
2018-07-20 17:35 ` Heinrich Schuchardt
2018-07-23 23:48 ` Simon Glass
2018-07-23 23:56 ` Tom Rini
2018-07-24 1:45 ` AKASHI Takahiro
2018-07-25 2:45 ` Simon Glass
2018-07-24 0:56 ` AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 12/17] fs: fat: remember the starting cluster number of directory AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 13/17] fs: fat: support mkdir AKASHI Takahiro
2018-07-20 17:14 ` Heinrich Schuchardt
2018-07-24 2:01 ` AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 14/17] cmd: fat: add fatmkdir command AKASHI Takahiro
2018-07-20 17:09 ` Heinrich Schuchardt
2018-07-24 2:07 ` AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 15/17] efi_loader: file: support creating a directory AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 16/17] efi_loader: implement a pseudo "file delete" AKASHI Takahiro
2018-07-20 2:57 ` [U-Boot] [PATCH 17/17] fs-test: fix false positive error at Test Case 12 AKASHI Takahiro
2018-07-29 7:02 ` Heinrich Schuchardt
2018-07-31 7:55 ` AKASHI Takahiro
2018-07-20 9:48 ` [U-Boot] [PATCH 00/17] fs: fat: extend FAT write operations Heinrich Schuchardt
2018-07-22 6:44 ` Heinrich Schuchardt
2018-07-23 7:35 ` AKASHI Takahiro
2018-07-23 14:46 ` Tom Rini
2018-08-06 22:34 ` Heinrich Schuchardt
2018-08-07 5:38 ` AKASHI Takahiro
2018-08-07 5:52 ` AKASHI Takahiro
2018-08-07 5:53 ` Heinrich Schuchardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180723081800.GS11258@linaro.org \
--to=takahiro.akashi@linaro.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox