From: Rob Clark <robdclark@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 7/9] fat/fs: move ls to generic implementation
Date: Sat, 9 Sep 2017 13:15:58 -0400 [thread overview]
Message-ID: <20170909171606.20029-8-robdclark@gmail.com> (raw)
In-Reply-To: <20170909171606.20029-1-robdclark@gmail.com>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="windows-1254", Size: 3888 bytes --]
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>
Reviewed-by: Łukasz Majewski <lukma@denx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
fs/fat/fat.c | 32 --------------------------------
fs/fs.c | 35 +++++++++++++++++++++++++++++++++--
include/fat.h | 5 ++++-
3 files changed, 37 insertions(+), 35 deletions(-)
diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 82ddb7eab1..c951d84f57 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -1029,38 +1029,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 fc0c953fcb..3481229aa6 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -37,6 +37,35 @@ 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)
+{
+ struct fs_dir_stream *dirs;
+ struct fs_dirent *dent;
+ int nfiles = 0, ndirs = 0;
+
+ dirs = fs_opendir(dirname);
+ if (!dirs)
+ return -errno;
+
+ while ((dent = fs_readdir(dirs))) {
+ if (dent->type == FS_DT_DIR) {
+ printf(" %s/\n", dent->name);
+ ndirs++;
+ } else {
+ printf(" %8lld %s\n", dent->size, dent->name);
+ nfiles++;
+ }
+ }
+
+ fs_closedir(dirs);
+
+ printf("\n%d file(s), %d dir(s)\n\n", nfiles, ndirs);
+
+ return 0;
+}
+
static inline int fs_exists_unsupported(const char *filename)
{
return 0;
@@ -123,7 +152,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,
@@ -133,7 +162,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 b255ce5337..83cd90017e 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 */
@@ -179,7 +180,6 @@ static inline u32 clust_to_sect(fsdata *fsdata, u32 clust)
}
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,
@@ -192,5 +192,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, struct fs_dir_stream **dirsp);
+int fat_readdir(struct fs_dir_stream *dirs, struct fs_dirent **dentp);
+void fat_closedir(struct fs_dir_stream *dirs);
void fat_close(void);
#endif /* _FAT_H_ */
--
2.13.5
next prev parent reply other threads:[~2017-09-09 17:15 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-09 17:15 [U-Boot] [PATCH v3 0/9] fs/fat: cleanups + readdir implementation Rob Clark
2017-09-09 17:15 ` [U-Boot] [PATCH v3 1/9] fs/fat: split out helper to init fsdata Rob Clark
2017-09-16 2:31 ` [U-Boot] [U-Boot, v3, " Tom Rini
2017-09-09 17:15 ` [U-Boot] [PATCH v3 2/9] fs/fat: introduce new director iterators Rob Clark
2017-09-16 2:32 ` [U-Boot] [U-Boot, v3, " Tom Rini
2017-09-09 17:15 ` [U-Boot] [PATCH v3 3/9] fat/fs: convert to directory iterators Rob Clark
2017-09-12 12:29 ` Simon Glass
2017-09-16 2:32 ` [U-Boot] [U-Boot, v3, " Tom Rini
2017-09-16 20:32 ` Adam Ford
2017-09-16 20:42 ` Rob Clark
2017-09-17 11:08 ` Adam Ford
2017-09-17 12:28 ` Rob Clark
2017-09-17 12:30 ` Rob Clark
2017-09-17 12:53 ` Rob Clark
2017-09-17 13:28 ` Tom Rini
2017-09-17 13:42 ` Adam Ford
2017-09-17 13:50 ` Rob Clark
2017-09-17 13:52 ` Adam Ford
2017-09-09 17:15 ` [U-Boot] [PATCH v3 4/9] fs: add fs_readdir() Rob Clark
2017-09-12 12:29 ` Simon Glass
2017-09-16 2:32 ` [U-Boot] [U-Boot,v3,4/9] " Tom Rini
2017-09-09 17:15 ` [U-Boot] [PATCH v3 5/9] fs/fat: implement opendir/readdir/closedir Rob Clark
2017-09-12 12:29 ` Simon Glass
2017-09-16 2:32 ` [U-Boot] [U-Boot, v3, " Tom Rini
2017-09-09 17:15 ` [U-Boot] [PATCH v3 6/9] fat/fs: remove a bunch of dead code Rob Clark
2017-09-16 2:32 ` [U-Boot] [U-Boot,v3,6/9] " Tom Rini
2017-09-09 17:15 ` Rob Clark [this message]
2017-09-16 2:32 ` [U-Boot] [U-Boot, v3, 7/9] fat/fs: move ls to generic implementation Tom Rini
2017-09-09 17:15 ` [U-Boot] [PATCH v3 8/9] fs/fat: fix case for FAT shortnames Rob Clark
2017-09-12 12:29 ` Simon Glass
2017-09-16 2:32 ` [U-Boot] [U-Boot,v3,8/9] " Tom Rini
2017-09-09 17:16 ` [U-Boot] [PATCH v3 9/9] fs/fat: Clean up open-coded sector <-> cluster conversions Rob Clark
2017-09-12 12:29 ` Simon Glass
2017-09-16 2:32 ` [U-Boot] [U-Boot, v3, " Tom Rini
-- strict thread matches above, loose matches on Subject: below --
2017-09-10 11:21 [U-Boot] [PATCH v2 00/21] efi_loader: enough UEFI for standard distro boot Rob Clark
2017-09-10 11:21 ` [U-Boot] [PATCH v3 7/9] fat/fs: move ls to generic implementation Rob Clark
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=20170909171606.20029-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox