@ -64,6 +64,15 @@ static inline void fs_close_unsupported(void)
struct fstype_info {
int fstype ;
/*
* Is it legal to pass NULL as . probe ( ) ' s fs_dev_desc parameter ? This
* should be false in most cases . For " virtual " filesystems which
* aren ' t based on a U - Boot block device ( e . g . sandbox ) , this can be
* set to true . This should also be true for the dumm entry at the end
* of fstypes [ ] , since that is essentially a " virtual " ( non - existent )
* filesystem .
*/
bool null_dev_desc_ok ;
int ( * probe ) ( block_dev_desc_t * fs_dev_desc ,
disk_partition_t * fs_partition ) ;
int ( * ls ) ( const char * dirname ) ;
@ -77,6 +86,7 @@ static struct fstype_info fstypes[] = {
# ifdef CONFIG_FS_FAT
{
. fstype = FS_TYPE_FAT ,
. null_dev_desc_ok = false ,
. probe = fat_set_blk_dev ,
. close = fat_close ,
. ls = file_fat_ls ,
@ -88,6 +98,7 @@ static struct fstype_info fstypes[] = {
# ifdef CONFIG_FS_EXT4
{
. fstype = FS_TYPE_EXT ,
. null_dev_desc_ok = false ,
. probe = ext4fs_probe ,
. close = ext4fs_close ,
. ls = ext4fs_ls ,
@ -99,6 +110,7 @@ static struct fstype_info fstypes[] = {
# ifdef CONFIG_SANDBOX
{
. fstype = FS_TYPE_SANDBOX ,
. null_dev_desc_ok = true ,
. probe = sandbox_fs_set_blk_dev ,
. close = sandbox_fs_close ,
. ls = sandbox_fs_ls ,
@ -109,6 +121,7 @@ static struct fstype_info fstypes[] = {
# endif
{
. fstype = FS_TYPE_ANY ,
. null_dev_desc_ok = true ,
. probe = fs_probe_unsupported ,
. close = fs_close_unsupported ,
. ls = fs_ls_unsupported ,
@ -162,6 +175,9 @@ int fs_set_blk_dev(const char *ifname, const char *dev_part_str, int fstype)
fstype ! = info - > fstype )
continue ;
if ( ! fs_dev_desc & & ! info - > null_dev_desc_ok )
continue ;
if ( ! info - > probe ( fs_dev_desc , & fs_partition ) ) {
fs_type = info - > fstype ;
return 0 ;