Skip to content

Commit

Permalink
fs: add unlink interface
Browse files Browse the repository at this point in the history
"unlink" interface is added to file operations.
This is a preparatory change as unlink support for FAT file system
will be added in next patch.

Signed-off-by: AKASHI Takahiro <[email protected]>
Signed-off-by: Alexander Graf <[email protected]>
  • Loading branch information
AKASHI Takahiro authored and agraf committed Sep 23, 2018
1 parent 5bc84a1 commit e2519da
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
40 changes: 40 additions & 0 deletions fs/fs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
};

Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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,
},
};
Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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)
{
Expand Down
12 changes: 12 additions & 0 deletions include/fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,16 @@ struct fs_dirent *fs_readdir(struct fs_dir_stream *dirs);
*/
void fs_closedir(struct fs_dir_stream *dirs);

/*
* fs_unlink - delete a file or directory
*
* If a given name is a directory, it will be deleted only if it's empty
*
* @filename: Name of file or directory to delete
* @return 0 on success, -1 on error conditions
*/
int fs_unlink(const char *filename);

/*
* fs_mkdir - Create a directory
*
Expand All @@ -177,6 +187,8 @@ int file_exists(const char *dev_type, const char *dev_part, const char *file,
int fstype);
int do_save(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
int fstype);
int do_rm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
int fstype);
int do_mkdir(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
int fstype);

Expand Down

0 comments on commit e2519da

Please sign in to comment.