diff options
Diffstat (limited to 'fs/fs.c')
| -rw-r--r-- | fs/fs.c | 118 | 
1 files changed, 8 insertions, 110 deletions
| @@ -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; |