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;
+}
 
 {
        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)
+{
+}
 
 {
 }
 
-#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,
 #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
        {
        struct fstype_info *info = fs_get_info(fs_type);
 
        info->close();
+
        fs_type = FS_TYPE_ANY;
 }
 
 
        ret = info->ls(dirname);
 
+       fs_type = FS_TYPE_ANY;
        fs_close();
 
        return ret;
 
 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