Skip to content

Commit 8b6bd43

Browse files
committed
extmod/vfs: Guard mutating fs functions with MICROPY_VFS_WRITABLE.
Enabled by default. Useful for ports that need the VFS but don't have any writable filesystems. Signed-off-by: Damien George <damien@micropython.org>
1 parent a3128f8 commit 8b6bd43

File tree

4 files changed

+16
-1
lines changed

4 files changed

+16
-1
lines changed

extmod/modos.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,15 @@ static const mp_rom_map_elem_t os_module_globals_table[] = {
171171
{ MP_ROM_QSTR(MP_QSTR_chdir), MP_ROM_PTR(&mp_vfs_chdir_obj) },
172172
{ MP_ROM_QSTR(MP_QSTR_getcwd), MP_ROM_PTR(&mp_vfs_getcwd_obj) },
173173
{ MP_ROM_QSTR(MP_QSTR_listdir), MP_ROM_PTR(&mp_vfs_listdir_obj) },
174+
#if MICROPY_VFS_WRITABLE
174175
{ MP_ROM_QSTR(MP_QSTR_mkdir), MP_ROM_PTR(&mp_vfs_mkdir_obj) },
175176
{ MP_ROM_QSTR(MP_QSTR_remove), MP_ROM_PTR(&mp_vfs_remove_obj) },
176177
{ MP_ROM_QSTR(MP_QSTR_rename), MP_ROM_PTR(&mp_vfs_rename_obj) },
177178
{ MP_ROM_QSTR(MP_QSTR_rmdir), MP_ROM_PTR(&mp_vfs_rmdir_obj) },
179+
{ MP_ROM_QSTR(MP_QSTR_unlink), MP_ROM_PTR(&mp_vfs_remove_obj) }, // unlink aliases to remove
180+
#endif
178181
{ MP_ROM_QSTR(MP_QSTR_stat), MP_ROM_PTR(&mp_vfs_stat_obj) },
179182
{ MP_ROM_QSTR(MP_QSTR_statvfs), MP_ROM_PTR(&mp_vfs_statvfs_obj) },
180-
{ MP_ROM_QSTR(MP_QSTR_unlink), MP_ROM_PTR(&mp_vfs_remove_obj) }, // unlink aliases to remove
181183
#endif
182184

183185
// The following are MicroPython extensions.

extmod/vfs.c

+4
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,8 @@ mp_obj_t mp_vfs_listdir(size_t n_args, const mp_obj_t *args) {
443443
}
444444
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_vfs_listdir_obj, 0, 1, mp_vfs_listdir);
445445

446+
#if MICROPY_VFS_WRITABLE
447+
446448
mp_obj_t mp_vfs_mkdir(mp_obj_t path_in) {
447449
mp_obj_t path_out;
448450
mp_vfs_mount_t *vfs = lookup_path(path_in, &path_out);
@@ -479,6 +481,8 @@ mp_obj_t mp_vfs_rmdir(mp_obj_t path_in) {
479481
}
480482
MP_DEFINE_CONST_FUN_OBJ_1(mp_vfs_rmdir_obj, mp_vfs_rmdir);
481483

484+
#endif // MICROPY_VFS_WRITABLE
485+
482486
mp_obj_t mp_vfs_stat(mp_obj_t path_in) {
483487
mp_obj_t path_out;
484488
mp_vfs_mount_t *vfs = lookup_path(path_in, &path_out);

extmod/vfs.h

+4
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,12 @@ mp_obj_t mp_vfs_chdir(mp_obj_t path_in);
9595
mp_obj_t mp_vfs_getcwd(void);
9696
mp_obj_t mp_vfs_ilistdir(size_t n_args, const mp_obj_t *args);
9797
mp_obj_t mp_vfs_listdir(size_t n_args, const mp_obj_t *args);
98+
#if MICROPY_VFS_WRITABLE
9899
mp_obj_t mp_vfs_mkdir(mp_obj_t path_in);
99100
mp_obj_t mp_vfs_remove(mp_obj_t path_in);
100101
mp_obj_t mp_vfs_rename(mp_obj_t old_path_in, mp_obj_t new_path_in);
101102
mp_obj_t mp_vfs_rmdir(mp_obj_t path_in);
103+
#endif
102104
mp_obj_t mp_vfs_stat(mp_obj_t path_in);
103105
mp_obj_t mp_vfs_statvfs(mp_obj_t path_in);
104106

@@ -111,10 +113,12 @@ MP_DECLARE_CONST_FUN_OBJ_1(mp_vfs_chdir_obj);
111113
MP_DECLARE_CONST_FUN_OBJ_0(mp_vfs_getcwd_obj);
112114
MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(mp_vfs_ilistdir_obj);
113115
MP_DECLARE_CONST_FUN_OBJ_VAR_BETWEEN(mp_vfs_listdir_obj);
116+
#if MICROPY_VFS_WRITABLE
114117
MP_DECLARE_CONST_FUN_OBJ_1(mp_vfs_mkdir_obj);
115118
MP_DECLARE_CONST_FUN_OBJ_1(mp_vfs_remove_obj);
116119
MP_DECLARE_CONST_FUN_OBJ_2(mp_vfs_rename_obj);
117120
MP_DECLARE_CONST_FUN_OBJ_1(mp_vfs_rmdir_obj);
121+
#endif
118122
MP_DECLARE_CONST_FUN_OBJ_1(mp_vfs_stat_obj);
119123
MP_DECLARE_CONST_FUN_OBJ_1(mp_vfs_statvfs_obj);
120124

py/mpconfig.h

+5
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,11 @@ typedef double mp_float_t;
991991
#define MICROPY_VFS (0)
992992
#endif
993993

994+
// Whether to include support for writable filesystems.
995+
#ifndef MICROPY_VFS_WRITABLE
996+
#define MICROPY_VFS_WRITABLE (1)
997+
#endif
998+
994999
// Support for VFS POSIX component, to mount a POSIX filesystem within VFS
9951000
#ifndef MICROPY_VFS_POSIX
9961001
#define MICROPY_VFS_POSIX (0)

0 commit comments

Comments
 (0)