It doesn't make a lot of sense to have these methods in fs.c. They are
filesystem-specific, not generic code. Add each to the relevant
filesystem and remove the associated #ifdefs in fs.c.

Signed-off-by: Simon Glass <s...@chromium.org>
---
 fs/ext4/ext4fs.c |   37 +++++++++++++++++
 fs/fat/fat.c     |   17 ++++++++
 fs/fs.c          |  118 ++++--------------------------------------------------
 include/ext4fs.h |    3 +
 include/fat.h    |    2 +
 5 files changed, 67 insertions(+), 110 deletions(-)

diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c
index 7fdb463..4dddde2 100644
--- a/fs/ext4/ext4fs.c
+++ b/fs/ext4/ext4fs.c
@@ -191,3 +191,40 @@ int ext4fs_read(char *buf, unsigned len)
 
        return ext4fs_read_file(ext4fs_file, 0, len, buf);
 }
+
+int ext4fs_probe(block_dev_desc_t *fs_dev_desc,
+                disk_partition_t *fs_partition)
+{
+       ext4fs_set_blk_dev(fs_dev_desc, fs_partition);
+
+       if (!ext4fs_mount(fs_partition->size)) {
+               ext4fs_close();
+               return -1;
+       }
+
+       return 0;
+}
+
+int ext4_read_file(const char *filename, void *buf, int offset, int len)
+{
+       int file_len;
+       int len_read;
+
+       if (offset != 0) {
+               printf("** Cannot support non-zero offset **\n");
+               return -1;
+       }
+
+       file_len = ext4fs_open(filename);
+       if (file_len < 0) {
+               printf("** File not found %s **\n", filename);
+               return -1;
+       }
+
+       if (len == 0)
+               len = file_len;
+
+       len_read = ext4fs_read(buf, len);
+
+       return len_read;
+}
diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 393c378..82135b5 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -1256,3 +1256,20 @@ long file_fat_read(const char *filename, void *buffer, 
unsigned long maxsize)
 {
        return file_fat_read_at(filename, 0, buffer, maxsize);
 }
+
+int fat_read_file(const char *filename, void *buf, int offset, int len)
+{
+       int len_read;
+
+       len_read = file_fat_read_at(filename, offset, buf, len);
+       if (len_read == -1) {
+               printf("** Unable to read file %s **\n", filename);
+               return -1;
+       }
+
+       return len_read;
+}
+
+void fat_close(void)
+{
+}
diff --git a/fs/fs.c b/fs/fs.c
index 0cbec99..95c882e 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -50,110 +50,6 @@ static inline void fs_close_unsupported(void)
 {
 }
 
-#ifdef CONFIG_FS_FAT
-static int fs_probe_fat(block_dev_desc_t *fs_dev_desc,
-                       disk_partition_t *fs_partition)
-{
-       return fat_set_blk_dev(fs_dev_desc, fs_partition);
-}
-
-static void fs_close_fat(void)
-{
-}
-
-#define fs_ls_fat file_fat_ls
-
-static int fs_read_fat(const char *filename, void *buf, int offset, int len)
-{
-       int len_read;
-
-       len_read = file_fat_read_at(filename, offset, buf, len);
-       if (len_read == -1) {
-               printf("** Unable to read file %s **\n", filename);
-               return -1;
-       }
-
-       return len_read;
-}
-#else
-static inline int fs_probe_fat(void)
-{
-       return -1;
-}
-
-static inline void fs_close_fat(void)
-{
-}
-
-#define fs_ls_fat fs_ls_unsupported
-#define fs_read_fat fs_read_unsupported
-#endif
-
-#ifdef CONFIG_FS_EXT4
-static int fs_probe_ext(block_dev_desc_t *fs_dev_desc,
-                       disk_partition_t *fs_partition)
-{
-       ext4fs_set_blk_dev(fs_dev_desc, fs_partition);
-
-       if (!ext4fs_mount(fs_partition->size)) {
-               ext4fs_close();
-               return -1;
-       }
-
-       return 0;
-}
-
-static void fs_close_ext(void)
-{
-       ext4fs_close();
-}
-
-#define fs_ls_ext ext4fs_ls
-
-static int fs_read_ext(const char *filename, void *buf, int offset, int len)
-{
-       int file_len;
-       int len_read;
-
-       if (offset != 0) {
-               printf("** Cannot support non-zero offset **\n");
-               return -1;
-       }
-
-       file_len = ext4fs_open(filename);
-       if (file_len < 0) {
-               printf("** File not found %s **\n", filename);
-               ext4fs_close();
-               return -1;
-       }
-
-       if (len == 0)
-               len = file_len;
-
-       len_read = ext4fs_read(buf, len);
-       ext4fs_close();
-
-       if (len_read != len) {
-               printf("** Unable to read file %s **\n", filename);
-               return -1;
-       }
-
-       return len_read;
-}
-#else
-static inline int fs_probe_ext(void)
-{
-       return -1;
-}
-
-static inline void fs_close_ext(void)
-{
-}
-
-#define fs_ls_ext fs_ls_unsupported
-#define fs_read_ext fs_read_unsupported
-#endif
-
 struct fstype_info {
        int fstype;
        int (*probe)(block_dev_desc_t *fs_dev_desc,
@@ -167,19 +63,19 @@ static struct fstype_info fstypes[] = {
 #ifdef CONFIG_FS_FAT
        {
                .fstype = FS_TYPE_FAT,
-               .probe = fs_probe_fat,
-               .close = fs_close_fat,
+               .probe = fat_set_blk_dev,
+               .close = fat_close,
                .ls = file_fat_ls,
-               .read = fs_read_fat,
+               .read = fat_read_file,
        },
 #endif
 #ifdef CONFIG_FS_EXT4
        {
                .fstype = FS_TYPE_EXT,
-               .probe = fs_probe_ext,
-               .close = fs_close_ext,
+               .probe = ext4fs_probe,
+               .close = ext4fs_close,
                .ls = ext4fs_ls,
-               .read = fs_read_ext,
+               .read = ext4_read_file,
        },
 #endif
        {
@@ -248,6 +144,7 @@ static void fs_close(void)
        struct fstype_info *info = fs_get_info(fs_type);
 
        info->close();
+
        fs_type = FS_TYPE_ANY;
 }
 
@@ -259,6 +156,7 @@ int fs_ls(const char *dirname)
 
        ret = info->ls(dirname);
 
+       fs_type = FS_TYPE_ANY;
        fs_close();
 
        return ret;
diff --git a/include/ext4fs.h b/include/ext4fs.h
index 3b59d15..025a2e8 100644
--- a/include/ext4fs.h
+++ b/include/ext4fs.h
@@ -138,4 +138,7 @@ void ext4fs_free_node(struct ext2fs_node *node, struct 
ext2fs_node *currroot);
 int ext4fs_devread(int sector, int byte_offset, int byte_len, char *buf);
 void ext4fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info);
 long int read_allocated_block(struct ext2_inode *inode, int fileblock);
+int ext4fs_probe(block_dev_desc_t *fs_dev_desc,
+                disk_partition_t *fs_partition);
+int ext4_read_file(const char *filename, void *buf, int offset, int len);
 #endif
diff --git a/include/fat.h b/include/fat.h
index 706cd7a..0b9017e 100644
--- a/include/fat.h
+++ b/include/fat.h
@@ -216,4 +216,6 @@ int fat_set_blk_dev(block_dev_desc_t *rbdd, 
disk_partition_t *info);
 int fat_register_device(block_dev_desc_t *dev_desc, int part_no);
 
 int file_fat_write(const char *filename, void *buffer, unsigned long maxsize);
+int fat_read_file(const char *filename, void *buf, int offset, int len);
+void fat_close(void);
 #endif /* _FAT_H_ */
-- 
1.7.7.3

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to