diff --git a/os/various/shell/shell_cmd.c b/os/various/shell/shell_cmd.c index d8a2fe834..4634bf604 100644 --- a/os/various/shell/shell_cmd.c +++ b/os/various/shell/shell_cmd.c @@ -408,6 +408,20 @@ static void cmd_mkdir(BaseSequentialStream *chp, int argc, char *argv[]) { } } +static void cmd_mv(BaseSequentialStream *chp, int argc, char *argv[]) { + msg_t ret; + + if (argc != 2) { + chprintf(chp, "Usage: mv " SHELL_NEWLINE_STR); + return; + } + + ret = vfsRename(argv[0], argv[1]); + if (CH_RET_IS_ERROR(ret)) { + chprintf(chp, "Failed (%d)" SHELL_NEWLINE_STR, ret); + } +} + static void cmd_pwd(BaseSequentialStream *chp, int argc, char *argv[]) { char *buf = NULL; @@ -442,6 +456,20 @@ static void cmd_pwd(BaseSequentialStream *chp, int argc, char *argv[]) { } } +static void cmd_rm(BaseSequentialStream *chp, int argc, char *argv[]) { + msg_t ret; + + if (argc != 1) { + chprintf(chp, "Usage: rm " SHELL_NEWLINE_STR); + return; + } + + ret = vfsUnlink(argv[0]); + if (CH_RET_IS_ERROR(ret)) { + chprintf(chp, "Failed (%d)" SHELL_NEWLINE_STR, ret); + } +} + static void cmd_rmdir(BaseSequentialStream *chp, int argc, char *argv[]) { msg_t ret; @@ -488,7 +516,9 @@ const ShellCommand shell_local_commands[] = { {"cd", cmd_cd}, {"ls", cmd_ls}, {"mkdir", cmd_mkdir}, + {"mv", cmd_mv}, {"pwd", cmd_pwd}, + {"rm", cmd_rm}, {"rmdir", cmd_rmdir}, {"tree", cmd_tree}, #endif diff --git a/os/vfs/drivers/fatfs/drvfatfs.c b/os/vfs/drivers/fatfs/drvfatfs.c index 9b8b21913..5efdaae44 100644 --- a/os/vfs/drivers/fatfs/drvfatfs.c +++ b/os/vfs/drivers/fatfs/drvfatfs.c @@ -120,6 +120,7 @@ static msg_t drv_open_file(void *instance, int flags, vfs_file_node_c **vfnpp); msg_t drv_unlink(void *instance, const char *path); +msg_t drv_rename(void *instance, const char *oldpath, const char *newpath); msg_t drv_mkdir(void *instance, const char *path); msg_t drv_rmdir(void *instance, const char *path); @@ -129,7 +130,7 @@ static const struct vfs_fatfs_driver_vmt driver_vmt = { .open_dir = drv_open_dir, .open_file = drv_open_file, .unlink = drv_unlink, - .rename = drv_rename_unimpl, + .rename = drv_rename, .mkdir = drv_mkdir, .rmdir = drv_rmdir }; @@ -437,6 +438,13 @@ msg_t drv_unlink(void *instance, const char *path) { return translate_error(f_unlink(path)); } +msg_t drv_rename(void *instance, const char *oldpath, const char *newpath) { + + (void)instance; + + return translate_error(f_rename(oldpath, newpath)); +} + msg_t drv_mkdir(void *instance, const char *path) { (void)instance;