extmod/vfs_lfsx: Fix rename to respect cur dir for new path.
If the new name start with '/', cur_dir is not prepened any more, so that the current working directory is respected. And extend the test cases for rename to cover this functionality.
This commit is contained in:
parent
d3ea28d04a
commit
0f83ef395c
|
@ -236,10 +236,13 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(MP_VFS_LFSx(rmdir_obj), MP_VFS_LFSx(rmdir));
|
|||
STATIC mp_obj_t MP_VFS_LFSx(rename)(mp_obj_t self_in, mp_obj_t path_old_in, mp_obj_t path_new_in) {
|
||||
MP_OBJ_VFS_LFSx *self = MP_OBJ_TO_PTR(self_in);
|
||||
const char *path_old = MP_VFS_LFSx(make_path)(self, path_old_in);
|
||||
const char *path = mp_obj_str_get_str(path_new_in);
|
||||
vstr_t path_new;
|
||||
vstr_init(&path_new, vstr_len(&self->cur_dir));
|
||||
vstr_add_strn(&path_new, vstr_str(&self->cur_dir), vstr_len(&self->cur_dir));
|
||||
vstr_add_str(&path_new, mp_obj_str_get_str(path_new_in));
|
||||
if (path[0] != '/') {
|
||||
vstr_add_strn(&path_new, vstr_str(&self->cur_dir), vstr_len(&self->cur_dir));
|
||||
}
|
||||
vstr_add_str(&path_new, path);
|
||||
int ret = LFSx_API(rename)(&self->lfs, path_old, vstr_null_terminated_str(&path_new));
|
||||
vstr_clear(&path_new);
|
||||
if (ret < 0) {
|
||||
|
|
|
@ -63,7 +63,7 @@ def test(bdev, vfs_class):
|
|||
# mkdir, rmdir
|
||||
vfs.mkdir("testdir")
|
||||
print(list(vfs.ilistdir()))
|
||||
print(list(vfs.ilistdir("testdir")))
|
||||
print(sorted(list(vfs.ilistdir("testdir"))))
|
||||
vfs.rmdir("testdir")
|
||||
print(list(vfs.ilistdir()))
|
||||
vfs.mkdir("testdir")
|
||||
|
@ -91,11 +91,17 @@ def test(bdev, vfs_class):
|
|||
|
||||
# rename
|
||||
vfs.rename("testbig", "testbig2")
|
||||
print(list(vfs.ilistdir()))
|
||||
print(sorted(list(vfs.ilistdir())))
|
||||
vfs.chdir("testdir")
|
||||
vfs.rename("/testbig2", "testbig2")
|
||||
print(sorted(list(vfs.ilistdir())))
|
||||
vfs.rename("testbig2", "/testbig2")
|
||||
vfs.chdir("/")
|
||||
print(sorted(list(vfs.ilistdir())))
|
||||
|
||||
# remove
|
||||
vfs.remove("testbig2")
|
||||
print(list(vfs.ilistdir()))
|
||||
print(sorted(list(vfs.ilistdir())))
|
||||
|
||||
# getcwd, chdir
|
||||
vfs.mkdir("/testdir2")
|
||||
|
|
|
@ -16,7 +16,9 @@ write 1
|
|||
write 2
|
||||
write 3
|
||||
(1024, 1024, 30, 6, 6, 0, 0, 0, 0, 255)
|
||||
[('test', 32768, 0, 8), ('testdir', 16384, 0, 0), ('testbig2', 32768, 0, 16384)]
|
||||
[('test', 32768, 0, 8), ('testbig2', 32768, 0, 16384), ('testdir', 16384, 0, 0)]
|
||||
[('testbig2', 32768, 0, 16384)]
|
||||
[('test', 32768, 0, 8), ('testbig2', 32768, 0, 16384), ('testdir', 16384, 0, 0)]
|
||||
[('test', 32768, 0, 8), ('testdir', 16384, 0, 0)]
|
||||
/
|
||||
/testdir
|
||||
|
@ -51,8 +53,10 @@ write 1
|
|||
write 2
|
||||
write 3
|
||||
(1024, 1024, 30, 7, 7, 0, 0, 0, 0, 255)
|
||||
[('testbig2', 32768, 0, 16384), ('testdir', 16384, 0, 0), ('test', 32768, 0, 8)]
|
||||
[('testdir', 16384, 0, 0), ('test', 32768, 0, 8)]
|
||||
[('test', 32768, 0, 8), ('testbig2', 32768, 0, 16384), ('testdir', 16384, 0, 0)]
|
||||
[('testbig2', 32768, 0, 16384)]
|
||||
[('test', 32768, 0, 8), ('testbig2', 32768, 0, 16384), ('testdir', 16384, 0, 0)]
|
||||
[('test', 32768, 0, 8), ('testdir', 16384, 0, 0)]
|
||||
/
|
||||
/testdir
|
||||
(32768, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
||||
|
|
Loading…
Reference in New Issue