@ -105,6 +105,11 @@ static inline int fs_opendir_unsupported(const char *filename,
return - EACCES ;
}
static inline int fs_unlink_unsupported ( const char * filename )
{
return - 1 ;
}
static inline int fs_mkdir_unsupported ( const char * dirname )
{
return - 1 ;
@ -147,6 +152,7 @@ struct fstype_info {
int ( * readdir ) ( struct fs_dir_stream * dirs , struct fs_dirent * * dentp ) ;
/* see fs_closedir() */
void ( * closedir ) ( struct fs_dir_stream * dirs ) ;
int ( * unlink ) ( const char * filename ) ;
int ( * mkdir ) ( const char * dirname ) ;
} ;
@ -173,6 +179,7 @@ static struct fstype_info fstypes[] = {
. opendir = fat_opendir ,
. readdir = fat_readdir ,
. closedir = fat_closedir ,
. unlink = fs_unlink_unsupported ,
} ,
# endif
# ifdef CONFIG_FS_EXT4
@ -193,6 +200,7 @@ static struct fstype_info fstypes[] = {
# endif
. uuid = ext4fs_uuid ,
. opendir = fs_opendir_unsupported ,
. unlink = fs_unlink_unsupported ,
. mkdir = fs_mkdir_unsupported ,
} ,
# endif
@ -210,6 +218,7 @@ static struct fstype_info fstypes[] = {
. write = fs_write_sandbox ,
. uuid = fs_uuid_unsupported ,
. opendir = fs_opendir_unsupported ,
. unlink = fs_unlink_unsupported ,
. mkdir = fs_mkdir_unsupported ,
} ,
# endif
@ -227,6 +236,7 @@ static struct fstype_info fstypes[] = {
. write = fs_write_unsupported ,
. uuid = fs_uuid_unsupported ,
. opendir = fs_opendir_unsupported ,
. unlink = fs_unlink_unsupported ,
. mkdir = fs_mkdir_unsupported ,
} ,
# endif
@ -244,6 +254,7 @@ static struct fstype_info fstypes[] = {
. write = fs_write_unsupported ,
. uuid = btrfs_uuid ,
. opendir = fs_opendir_unsupported ,
. unlink = fs_unlink_unsupported ,
. mkdir = fs_mkdir_unsupported ,
} ,
# endif
@ -260,6 +271,7 @@ static struct fstype_info fstypes[] = {
. write = fs_write_unsupported ,
. uuid = fs_uuid_unsupported ,
. opendir = fs_opendir_unsupported ,
. unlink = fs_unlink_unsupported ,
. mkdir = fs_mkdir_unsupported ,
} ,
} ;
@ -510,6 +522,19 @@ void fs_closedir(struct fs_dir_stream *dirs)
fs_close ( ) ;
}
int fs_unlink ( const char * filename )
{
int ret ;
struct fstype_info * info = fs_get_info ( fs_type ) ;
ret = info - > unlink ( filename ) ;
fs_type = FS_TYPE_ANY ;
fs_close ( ) ;
return ret ;
}
int fs_mkdir ( const char * dirname )
{
@ -727,6 +752,21 @@ int do_fs_type(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
return CMD_RET_SUCCESS ;
}
int do_rm ( cmd_tbl_t * cmdtp , int flag , int argc , char * const argv [ ] ,
int fstype )
{
if ( argc ! = 4 )
return CMD_RET_USAGE ;
if ( fs_set_blk_dev ( argv [ 1 ] , argv [ 2 ] , fstype ) )
return 1 ;
if ( fs_unlink ( argv [ 3 ] ) )
return 1 ;
return 0 ;
}
int do_mkdir ( cmd_tbl_t * cmdtp , int flag , int argc , char * const argv [ ] ,
int fstype )
{