summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extmod/vfs_lfsx.c12
-rw-r--r--tests/extmod/vfs_lfs_mount.py17
-rw-r--r--tests/extmod/vfs_lfs_mount.py.exp6
3 files changed, 32 insertions, 3 deletions
diff --git a/extmod/vfs_lfsx.c b/extmod/vfs_lfsx.c
index 35d5f03c5..f865e4606 100644
--- a/extmod/vfs_lfsx.c
+++ b/extmod/vfs_lfsx.c
@@ -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_obj_t MP_VFS_LFSx(mount)(mp_obj_t self_in, mp_obj_t readonly, mp_obj_t mkfs) {
- (void)self_in;
- (void)readonly;
+ MP_OBJ_VFS_LFSx *self = MP_OBJ_TO_PTR(self_in);
(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;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_3(MP_VFS_LFSx(mount_obj), MP_VFS_LFSx(mount));
diff --git a/tests/extmod/vfs_lfs_mount.py b/tests/extmod/vfs_lfs_mount.py
index 2c40b2989..3d8cec607 100644
--- a/tests/extmod/vfs_lfs_mount.py
+++ b/tests/extmod/vfs_lfs_mount.py
@@ -67,6 +67,23 @@ def test(bdev, vfs_class):
# umount
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
usys.modules.clear()
diff --git a/tests/extmod/vfs_lfs_mount.py.exp b/tests/extmod/vfs_lfs_mount.py.exp
index b5c521531..aa654ebe0 100644
--- a/tests/extmod/vfs_lfs_mount.py.exp
+++ b/tests/extmod/vfs_lfs_mount.py.exp
@@ -2,7 +2,13 @@ test <class 'VfsLfs1'>
hello from lfs
package
hello from lfs
+lfsmod2.py: print("hello from lfs")
+
+OSError(30,)
test <class 'VfsLfs2'>
hello from lfs
package
hello from lfs
+lfsmod2.py: print("hello from lfs")
+
+OSError(36,)