From a5ea4b9f3f3fd394afdf65223b5e55c8d9fccc53 Mon Sep 17 00:00:00 2001 From: robert Date: Wed, 29 Apr 2020 18:13:22 +0200 Subject: [PATCH] extmod/vfs_lfsx: Fix path handling in uos.stat() to consider cur dir. This fixes the bug, that stat(filename) would not consider the current working directory. So if e.g. the cwd is "lib", then stat("main.py") would return the info for "/main.py" instead of "/lib/main.py". --- extmod/vfs_lfsx.c | 2 +- tests/extmod/vfs_lfs.py | 8 ++++++++ tests/extmod/vfs_lfs.py.exp | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/extmod/vfs_lfsx.c b/extmod/vfs_lfsx.c index b381056b81..9474e960fc 100644 --- a/extmod/vfs_lfsx.c +++ b/extmod/vfs_lfsx.c @@ -304,7 +304,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(MP_VFS_LFSx(getcwd_obj), MP_VFS_LFSx(getcwd)); STATIC mp_obj_t MP_VFS_LFSx(stat)(mp_obj_t self_in, mp_obj_t path_in) { MP_OBJ_VFS_LFSx *self = MP_OBJ_TO_PTR(self_in); - const char *path = mp_obj_str_get_str(path_in); + const char *path = MP_VFS_LFSx(make_path)(self, path_in); struct LFSx_API (info) info; int ret = LFSx_API(stat)(&self->lfs, path, &info); if (ret < 0) { diff --git a/tests/extmod/vfs_lfs.py b/tests/extmod/vfs_lfs.py index c3656fe687..1d47605c55 100644 --- a/tests/extmod/vfs_lfs.py +++ b/tests/extmod/vfs_lfs.py @@ -101,6 +101,14 @@ def test(bdev, vfs_class): print(vfs.getcwd()) vfs.chdir("/testdir") print(vfs.getcwd()) + + # create file in directory to make sure paths are relative + vfs.open("test2", "w").close() + print(vfs.stat("test2")) + print(vfs.stat("/testdir/test2")) + vfs.remove("test2") + + # chdir back to root and remove testdir vfs.chdir("/") print(vfs.getcwd()) vfs.rmdir("testdir") diff --git a/tests/extmod/vfs_lfs.py.exp b/tests/extmod/vfs_lfs.py.exp index 7d4aed0417..de739e7330 100644 --- a/tests/extmod/vfs_lfs.py.exp +++ b/tests/extmod/vfs_lfs.py.exp @@ -20,6 +20,8 @@ write 3 [('test', 32768, 0, 8), ('testdir', 16384, 0, 0)] / /testdir +(32768, 0, 0, 0, 0, 0, 0, 0, 0, 0) +(32768, 0, 0, 0, 0, 0, 0, 0, 0, 0) / test (1024, 1024, 30, 28, 28, 0, 0, 0, 0, 255) @@ -43,4 +45,6 @@ write 3 [('testdir', 16384, 0, 0), ('test', 32768, 0, 8)] / /testdir +(32768, 0, 0, 0, 0, 0, 0, 0, 0, 0) +(32768, 0, 0, 0, 0, 0, 0, 0, 0, 0) /