Skip to content

Commit

Permalink
Revert "fat/fs: move ls to generic implementation"
Browse files Browse the repository at this point in the history
This reverts commit 89191d6.

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: Vipul Kumar <vipul.kumar@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
  • Loading branch information
Vipul Kumar authored and Michal Simek committed Sep 5, 2018
1 parent f975d9c commit 57bade5
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 37 deletions.
32 changes: 32 additions & 0 deletions fs/fat/fat.c
Expand Up @@ -1028,6 +1028,38 @@ 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;
Expand Down
35 changes: 2 additions & 33 deletions fs/fs.c
Expand Up @@ -38,35 +38,6 @@ 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;
Expand Down Expand Up @@ -153,7 +124,7 @@ static struct fstype_info fstypes[] = {
.null_dev_desc_ok = false,
.probe = fat_set_blk_dev,
.close = fat_close,
.ls = fs_ls_generic,
.ls = file_fat_ls,
.exists = fat_exists,
.size = fat_size,
.read = fat_read_file,
Expand All @@ -163,9 +134,7 @@ static struct fstype_info fstypes[] = {
.write = fs_write_unsupported,
#endif
.uuid = fs_uuid_unsupported,
.opendir = fat_opendir,
.readdir = fat_readdir,
.closedir = fat_closedir,
.opendir = fs_opendir_unsupported,
},
#endif
#ifdef CONFIG_FS_EXT4
Expand Down
5 changes: 1 addition & 4 deletions include/fat.h
Expand Up @@ -11,7 +11,6 @@
#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 */
Expand Down Expand Up @@ -184,6 +183,7 @@ static inline u32 sect_to_clust(fsdata *fsdata, u32 sect)
}

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,
Expand All @@ -196,8 +196,5 @@ 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_ */

0 comments on commit 57bade5

Please sign in to comment.