@ -37,6 +37,35 @@ static inline int fs_ls_unsupported(const char *dirname)
return - 1 ;
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 )
static inline int fs_exists_unsupported ( const char * filename )
{
{
return 0 ;
return 0 ;
@ -123,7 +152,7 @@ static struct fstype_info fstypes[] = {
. null_dev_desc_ok = false ,
. null_dev_desc_ok = false ,
. probe = fat_set_blk_dev ,
. probe = fat_set_blk_dev ,
. close = fat_close ,
. close = fat_close ,
. ls = file_fat_ls ,
. ls = fs_ls_generic ,
. exists = fat_exists ,
. exists = fat_exists ,
. size = fat_size ,
. size = fat_size ,
. read = fat_read_file ,
. read = fat_read_file ,
@ -133,7 +162,9 @@ static struct fstype_info fstypes[] = {
. write = fs_write_unsupported ,
. write = fs_write_unsupported ,
# endif
# endif
. uuid = fs_uuid_unsupported ,
. uuid = fs_uuid_unsupported ,
. opendir = fs_opendir_unsupported ,
. opendir = fat_opendir ,
. readdir = fat_readdir ,
. closedir = fat_closedir ,
} ,
} ,
# endif
# endif
# ifdef CONFIG_FS_EXT4
# ifdef CONFIG_FS_EXT4