|
39 | 39 | #include "lib/oofatfs/ff.h"
|
40 | 40 | #include "extmod/vfs_fat.h"
|
41 | 41 | #include "lib/timeutils/timeutils.h"
|
42 |
| - |
| 42 | +#include "supervisor/filesystem.h" |
43 | 43 | #include "supervisor/shared/translate.h"
|
44 | 44 |
|
45 | 45 | #if _MAX_SS == _MIN_SS
|
@@ -99,6 +99,12 @@ STATIC mp_obj_t fat_vfs_make_new(const mp_obj_type_t *type, size_t n_args, const
|
99 | 99 | return MP_OBJ_FROM_PTR(vfs);
|
100 | 100 | }
|
101 | 101 |
|
| 102 | +STATIC void verify_fs_writable(fs_user_mount_t *vfs) { |
| 103 | + if (!filesystem_is_writable_by_python(vfs)) { |
| 104 | + mp_raise_OSError(MP_EROFS); |
| 105 | + } |
| 106 | +} |
| 107 | + |
102 | 108 | #if _FS_REENTRANT
|
103 | 109 | STATIC mp_obj_t fat_vfs_del(mp_obj_t self_in) {
|
104 | 110 | mp_obj_fat_vfs_t *self = MP_OBJ_TO_PTR(self_in);
|
@@ -201,6 +207,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(fat_vfs_ilistdir_obj, 1, 2, fat_vfs_i
|
201 | 207 |
|
202 | 208 | STATIC mp_obj_t fat_vfs_remove_internal(mp_obj_t vfs_in, mp_obj_t path_in, mp_int_t attr) {
|
203 | 209 | mp_obj_fat_vfs_t *self = MP_OBJ_TO_PTR(vfs_in);
|
| 210 | + verify_fs_writable(self); |
204 | 211 | const char *path = mp_obj_str_get_str(path_in);
|
205 | 212 |
|
206 | 213 | FILINFO fno;
|
@@ -235,6 +242,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(fat_vfs_rmdir_obj, fat_vfs_rmdir);
|
235 | 242 |
|
236 | 243 | STATIC mp_obj_t fat_vfs_rename(mp_obj_t vfs_in, mp_obj_t path_in, mp_obj_t path_out) {
|
237 | 244 | mp_obj_fat_vfs_t *self = MP_OBJ_TO_PTR(vfs_in);
|
| 245 | + verify_fs_writable(self); |
238 | 246 | const char *old_path = mp_obj_str_get_str(path_in);
|
239 | 247 | const char *new_path = mp_obj_str_get_str(path_out);
|
240 | 248 |
|
@@ -271,6 +279,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(fat_vfs_rename_obj, fat_vfs_rename);
|
271 | 279 |
|
272 | 280 | STATIC mp_obj_t fat_vfs_mkdir(mp_obj_t vfs_in, mp_obj_t path_o) {
|
273 | 281 | mp_obj_fat_vfs_t *self = MP_OBJ_TO_PTR(vfs_in);
|
| 282 | + verify_fs_writable(self); |
274 | 283 | const char *path = mp_obj_str_get_str(path_o);
|
275 | 284 | FRESULT res = f_mkdir(&self->fatfs, path);
|
276 | 285 | if (res == FR_OK) {
|
@@ -435,6 +444,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(fat_vfs_getlabel_obj, vfs_fat_getlabel);
|
435 | 444 |
|
436 | 445 | STATIC mp_obj_t vfs_fat_setlabel(mp_obj_t self_in, mp_obj_t label_in) {
|
437 | 446 | fs_user_mount_t *self = MP_OBJ_TO_PTR(self_in);
|
| 447 | + verify_fs_writable(self); |
438 | 448 | const char *label_str = mp_obj_str_get_str(label_in);
|
439 | 449 | FRESULT res = f_setlabel(&self->fatfs, label_str);
|
440 | 450 | if (res != FR_OK) {
|
|
0 commit comments