extmod/vfs_lfsx: Fix import_stat so it takes into account current dir.
CPython semantics require searching the current directory if the import is not absolute (when "" is in sys.path). Fixes issue #6037.
This commit is contained in:
parent
463c0fb2f4
commit
7dffbfd22a
@ -31,6 +31,7 @@
|
|||||||
#include "py/stream.h"
|
#include "py/stream.h"
|
||||||
#include "py/binary.h"
|
#include "py/binary.h"
|
||||||
#include "py/objarray.h"
|
#include "py/objarray.h"
|
||||||
|
#include "py/objstr.h"
|
||||||
#include "py/mperrno.h"
|
#include "py/mperrno.h"
|
||||||
#include "extmod/vfs.h"
|
#include "extmod/vfs.h"
|
||||||
|
|
||||||
@ -440,6 +441,8 @@ STATIC MP_DEFINE_CONST_DICT(MP_VFS_LFSx(locals_dict), MP_VFS_LFSx(locals_dict_ta
|
|||||||
STATIC mp_import_stat_t MP_VFS_LFSx(import_stat)(void *self_in, const char *path) {
|
STATIC mp_import_stat_t MP_VFS_LFSx(import_stat)(void *self_in, const char *path) {
|
||||||
MP_OBJ_VFS_LFSx *self = self_in;
|
MP_OBJ_VFS_LFSx *self = self_in;
|
||||||
struct LFSx_API (info) info;
|
struct LFSx_API (info) info;
|
||||||
|
mp_obj_str_t path_obj = { { &mp_type_str }, 0, 0, (const byte *)path };
|
||||||
|
path = MP_VFS_LFSx(make_path)(self, &path_obj);
|
||||||
int ret = LFSx_API(stat)(&self->lfs, path, &info);
|
int ret = LFSx_API(stat)(&self->lfs, path, &info);
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
if (info.type == LFSx_MACRO(_TYPE_REG)) {
|
if (info.type == LFSx_MACRO(_TYPE_REG)) {
|
||||||
|
|||||||
@ -58,6 +58,12 @@ def test(bdev, vfs_class):
|
|||||||
f.write('print("package")\n')
|
f.write('print("package")\n')
|
||||||
import lfspkg
|
import lfspkg
|
||||||
|
|
||||||
|
# chdir and import module from current directory (needs "" in sys.path)
|
||||||
|
uos.mkdir("/lfs/subdir")
|
||||||
|
uos.chdir("/lfs/subdir")
|
||||||
|
uos.rename("/lfs/lfsmod.py", "/lfs/subdir/lfsmod2.py")
|
||||||
|
import lfsmod2
|
||||||
|
|
||||||
# umount
|
# umount
|
||||||
uos.umount("/lfs")
|
uos.umount("/lfs")
|
||||||
|
|
||||||
@ -72,6 +78,7 @@ import sys
|
|||||||
|
|
||||||
sys.path.clear()
|
sys.path.clear()
|
||||||
sys.path.append("/lfs")
|
sys.path.append("/lfs")
|
||||||
|
sys.path.append("")
|
||||||
|
|
||||||
# run tests
|
# run tests
|
||||||
test(bdev, uos.VfsLfs1)
|
test(bdev, uos.VfsLfs1)
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
test <class 'VfsLfs1'>
|
test <class 'VfsLfs1'>
|
||||||
hello from lfs
|
hello from lfs
|
||||||
package
|
package
|
||||||
|
hello from lfs
|
||||||
test <class 'VfsLfs2'>
|
test <class 'VfsLfs2'>
|
||||||
hello from lfs
|
hello from lfs
|
||||||
package
|
package
|
||||||
|
hello from lfs
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user