extmod/vfs_lfs: Support mounting LFS filesystems in read-only mode.
Signed-off-by: Damien George <damien@micropython.org>bound-method-equality
parent
0118c07916
commit
03a1f94ea1
|
@ -423,10 +423,16 @@ STATIC mp_obj_t MP_VFS_LFSx(statvfs)(mp_obj_t self_in, mp_obj_t path_in) {
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(MP_VFS_LFSx(statvfs_obj), MP_VFS_LFSx(statvfs));
|
STATIC MP_DEFINE_CONST_FUN_OBJ_2(MP_VFS_LFSx(statvfs_obj), MP_VFS_LFSx(statvfs));
|
||||||
|
|
||||||
STATIC mp_obj_t MP_VFS_LFSx(mount)(mp_obj_t self_in, mp_obj_t readonly, mp_obj_t mkfs) {
|
STATIC mp_obj_t MP_VFS_LFSx(mount)(mp_obj_t self_in, mp_obj_t readonly, mp_obj_t mkfs) {
|
||||||
(void)self_in;
|
MP_OBJ_VFS_LFSx *self = MP_OBJ_TO_PTR(self_in);
|
||||||
(void)readonly;
|
|
||||||
(void)mkfs;
|
(void)mkfs;
|
||||||
// already called LFSx_API(mount) in MP_VFS_LFSx(make_new)
|
|
||||||
|
// Make block device read-only if requested.
|
||||||
|
if (mp_obj_is_true(readonly)) {
|
||||||
|
self->blockdev.writeblocks[0] = MP_OBJ_NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Already called LFSx_API(mount) in MP_VFS_LFSx(make_new) so the filesystem is ready.
|
||||||
|
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_3(MP_VFS_LFSx(mount_obj), MP_VFS_LFSx(mount));
|
STATIC MP_DEFINE_CONST_FUN_OBJ_3(MP_VFS_LFSx(mount_obj), MP_VFS_LFSx(mount));
|
||||||
|
|
|
@ -67,6 +67,23 @@ def test(bdev, vfs_class):
|
||||||
# umount
|
# umount
|
||||||
uos.umount("/lfs")
|
uos.umount("/lfs")
|
||||||
|
|
||||||
|
# mount read-only
|
||||||
|
vfs = vfs_class(bdev)
|
||||||
|
uos.mount(vfs, "/lfs", readonly=True)
|
||||||
|
|
||||||
|
# test reading works
|
||||||
|
with open("/lfs/subdir/lfsmod2.py") as f:
|
||||||
|
print("lfsmod2.py:", f.read())
|
||||||
|
|
||||||
|
# test writing fails
|
||||||
|
try:
|
||||||
|
open("/lfs/test_write", "w")
|
||||||
|
except OSError as er:
|
||||||
|
print(repr(er))
|
||||||
|
|
||||||
|
# umount
|
||||||
|
uos.umount("/lfs")
|
||||||
|
|
||||||
# clear imported modules
|
# clear imported modules
|
||||||
usys.modules.clear()
|
usys.modules.clear()
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,13 @@ test <class 'VfsLfs1'>
|
||||||
hello from lfs
|
hello from lfs
|
||||||
package
|
package
|
||||||
hello from lfs
|
hello from lfs
|
||||||
|
lfsmod2.py: print("hello from lfs")
|
||||||
|
|
||||||
|
OSError(30,)
|
||||||
test <class 'VfsLfs2'>
|
test <class 'VfsLfs2'>
|
||||||
hello from lfs
|
hello from lfs
|
||||||
package
|
package
|
||||||
hello from lfs
|
hello from lfs
|
||||||
|
lfsmod2.py: print("hello from lfs")
|
||||||
|
|
||||||
|
OSError(36,)
|
||||||
|
|
Loading…
Reference in New Issue