From: Rob Clark <robdclark@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 7/8] fat/fs: move ls to generic implementation
Date: Sun, 13 Aug 2017 06:45:27 -0400 [thread overview]
Message-ID: <20170813104531.16407-8-robdclark@gmail.com> (raw)
In-Reply-To: <20170813104531.16407-1-robdclark@gmail.com>
Add a generic implementation of 'ls' using opendir/readdir/closedir, and
replace fat's custom implementation. Other filesystems should move to
the generic implementation after they add opendir/readdir/closedir
support.
Signed-off-by: Rob Clark <robdclark@gmail.com>
---
fs/fat/fat.c | 32 --------------------------------
fs/fs.c | 33 +++++++++++++++++++++++++++++++--
include/fat.h | 5 ++++-
3 files changed, 35 insertions(+), 35 deletions(-)
diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index fe5819315b..08a066d80d 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -1002,38 +1002,6 @@ int file_fat_detectfs(void)
return 0;
}
-int file_fat_ls(const char *dir)
-{
- fsdata fsdata;
- fat_itr itrblock, *itr = &itrblock;
- int files = 0, dirs = 0;
- int ret;
-
- ret = fat_itr_root(itr, &fsdata);
- if (ret)
- return ret;
-
- ret = fat_itr_resolve(itr, dir, TYPE_DIR);
- if (ret)
- return ret;
-
- while (fat_itr_next(itr)) {
- if (fat_itr_isdir(itr)) {
- printf(" %s/\n", itr->name);
- dirs++;
- } else {
- printf(" %8u %s\n",
- FAT2CPU32(itr->dent->size),
- itr->name);
- files++;
- }
- }
-
- printf("\n%d file(s), %d dir(s)\n\n", files, dirs);
-
- return 0;
-}
-
int fat_exists(const char *filename)
{
fsdata fsdata;
diff --git a/fs/fs.c b/fs/fs.c
index f9ea3480e9..057329d78c 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -37,6 +37,33 @@ static inline int fs_ls_unsupported(const char *dirname)
return -1;
}
+/* generic implementation of ls in terms of opendir/readdir/closedir */
+__maybe_unused
+static int fs_ls_generic(const char *dirname)
+{
+ FS_DIR *dirp;
+ struct fs_dirent *dent;
+ int files = 0, dirs = 0;
+
+ dirp = fs_opendir(dirname);
+ if (!dirp)
+ return -errno;
+
+ while ((dent = fs_readdir(dirp))) {
+ if (dent->type == FS_DT_DIR) {
+ printf(" %s/\n", dent->name);
+ dirs++;
+ } else {
+ printf(" %8lld %s\n", dent->size, dent->name);
+ files++;
+ }
+ }
+
+ printf("\n%d file(s), %d dir(s)\n\n", files, dirs);
+
+ return 0;
+}
+
static inline int fs_exists_unsupported(const char *filename)
{
return 0;
@@ -111,7 +138,7 @@ static struct fstype_info fstypes[] = {
.null_dev_desc_ok = false,
.probe = fat_set_blk_dev,
.close = fat_close,
- .ls = file_fat_ls,
+ .ls = fs_ls_generic,
.exists = fat_exists,
.size = fat_size,
.read = fat_read_file,
@@ -121,7 +148,9 @@ static struct fstype_info fstypes[] = {
.write = fs_write_unsupported,
#endif
.uuid = fs_uuid_unsupported,
- .opendir = fs_opendir_unsupported,
+ .opendir = fat_opendir,
+ .readdir = fat_readdir,
+ .closedir = fat_closedir,
},
#endif
#ifdef CONFIG_FS_EXT4
diff --git a/include/fat.h b/include/fat.h
index 1e8bc44e9a..b2d4b952fd 100644
--- a/include/fat.h
+++ b/include/fat.h
@@ -11,6 +11,7 @@
#define _FAT_H_
#include <asm/byteorder.h>
+#include <fs.h>
#define CONFIG_SUPPORT_VFAT
/* Maximum Long File Name length supported here is 128 UTF-16 code units */
@@ -172,7 +173,6 @@ typedef struct {
} fsdata;
int file_fat_detectfs(void);
-int file_fat_ls(const char *dir);
int fat_exists(const char *filename);
int fat_size(const char *filename, loff_t *size);
int file_fat_read_at(const char *filename, loff_t pos, void *buffer,
@@ -185,5 +185,8 @@ int file_fat_write(const char *filename, void *buf, loff_t offset, loff_t len,
loff_t *actwrite);
int fat_read_file(const char *filename, void *buf, loff_t offset, loff_t len,
loff_t *actread);
+int fat_opendir(const char *filename, FS_DIR **dirp);
+int fat_readdir(FS_DIR *dirp);
+void fat_closedir(FS_DIR *dirp);
void fat_close(void);
#endif /* _FAT_H_ */
--
2.13.0
next prev parent reply other threads:[~2017-08-13 10:45 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-13 10:45 [U-Boot] [PATCH 0/8] fs/fat: cleanups + readdir implementation Rob Clark
2017-08-13 10:45 ` [U-Boot] [PATCH 1/8] fs/fat: split out helper to init fsdata Rob Clark
2017-08-13 10:45 ` [U-Boot] [PATCH 2/8] fs/fat: introduce new director iterators Rob Clark
2017-08-13 10:45 ` [U-Boot] [PATCH 3/8] fat/fs: convert to directory iterators Rob Clark
2017-08-13 10:45 ` [U-Boot] [PATCH 4/8] fs: add fs_readdir() Rob Clark
2017-08-13 10:45 ` [U-Boot] [PATCH 5/8] fs/fat: implement opendir/readdir/closedir Rob Clark
2017-08-13 10:45 ` [U-Boot] [PATCH 6/8] fat/fs: remove a bunch of dead code Rob Clark
2017-08-13 11:11 ` Stefan Bruens
2017-08-13 10:45 ` Rob Clark [this message]
2017-08-13 10:45 ` [U-Boot] [PATCH 8/8] fs/fat: fix case for FAT shortnames Rob Clark
2017-08-13 11:25 ` Stefan Bruens
2017-08-13 12:14 ` Rob Clark
2017-08-13 18:09 ` [U-Boot] [PATCH v2 " Rob Clark
2017-08-13 11:28 ` [U-Boot] [PATCH 0/8] fs/fat: cleanups + readdir implementation Heinrich Schuchardt
2017-08-13 12:13 ` Rob Clark
2017-08-13 21:13 ` Tom Rini
2017-08-13 21:50 ` Rob Clark
2017-08-13 21:59 ` Tom Rini
2017-08-14 12:48 ` Rob Clark
2017-08-14 13:05 ` Tom Rini
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=20170813104531.16407-8-robdclark@gmail.com \
--to=robdclark@gmail.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.