@@ -98,8 +98,8 @@ STATIC mp_obj_t fat_vfs_make_new(const mp_obj_type_t *type, size_t n_args, size_
98
98
return MP_OBJ_FROM_PTR (vfs );
99
99
}
100
100
101
- STATIC void filesystem_lock_raise (fs_user_mount_t * vfs ) {
102
- if (!filesystem_lock (vfs )) {
101
+ STATIC void verify_fs_writable (fs_user_mount_t * vfs ) {
102
+ if (!filesystem_is_writable_by_python (vfs )) {
103
103
mp_raise_OSError (MP_EROFS );
104
104
}
105
105
}
@@ -218,6 +218,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(fat_vfs_ilistdir_obj, 1, 2, fat_vfs_i
218
218
219
219
STATIC mp_obj_t fat_vfs_remove_internal (mp_obj_t vfs_in , mp_obj_t path_in , mp_int_t attr ) {
220
220
mp_obj_fat_vfs_t * self = MP_OBJ_TO_PTR (vfs_in );
221
+ verify_fs_writable (self );
221
222
const char * path = mp_obj_str_get_str (path_in );
222
223
223
224
FILINFO fno ;
@@ -229,9 +230,7 @@ STATIC mp_obj_t fat_vfs_remove_internal(mp_obj_t vfs_in, mp_obj_t path_in, mp_in
229
230
230
231
// check if path is a file or directory
231
232
if ((fno .fattrib & AM_DIR ) == attr ) {
232
- filesystem_lock_raise (self );
233
233
res = f_unlink (& self -> fatfs , path );
234
- filesystem_unlock (self );
235
234
236
235
if (res != FR_OK ) {
237
236
mp_raise_OSError_fresult (res );
@@ -254,18 +253,17 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(fat_vfs_rmdir_obj, fat_vfs_rmdir);
254
253
255
254
STATIC mp_obj_t fat_vfs_rename (mp_obj_t vfs_in , mp_obj_t path_in , mp_obj_t path_out ) {
256
255
mp_obj_fat_vfs_t * self = MP_OBJ_TO_PTR (vfs_in );
256
+ verify_fs_writable (self );
257
257
const char * old_path = mp_obj_str_get_str (path_in );
258
258
const char * new_path = mp_obj_str_get_str (path_out );
259
259
260
- filesystem_lock_raise (self );
261
260
FRESULT res = f_rename (& self -> fatfs , old_path , new_path );
262
261
if (res == FR_EXIST ) {
263
262
// if new_path exists then try removing it (but only if it's a file)
264
263
fat_vfs_remove_internal (vfs_in , path_out , 0 ); // 0 == file attribute
265
264
// try to rename again
266
265
res = f_rename (& self -> fatfs , old_path , new_path );
267
266
}
268
- filesystem_unlock (self );
269
267
if (res == FR_OK ) {
270
268
return mp_const_none ;
271
269
} else {
@@ -277,10 +275,9 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(fat_vfs_rename_obj, fat_vfs_rename);
277
275
278
276
STATIC mp_obj_t fat_vfs_mkdir (mp_obj_t vfs_in , mp_obj_t path_o ) {
279
277
mp_obj_fat_vfs_t * self = MP_OBJ_TO_PTR (vfs_in );
278
+ verify_fs_writable (self );
280
279
const char * path = mp_obj_str_get_str (path_o );
281
- filesystem_lock_raise (self );
282
280
FRESULT res = f_mkdir (& self -> fatfs , path );
283
- filesystem_unlock (self );
284
281
if (res == FR_OK ) {
285
282
return mp_const_none ;
286
283
} else {
@@ -466,11 +463,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(fat_vfs_utime_obj, vfs_fat_utime);
466
463
467
464
STATIC mp_obj_t vfs_fat_getreadonly (mp_obj_t self_in ) {
468
465
fs_user_mount_t * self = MP_OBJ_TO_PTR (self_in );
469
- bool writable = filesystem_lock (self );
470
- if (writable ) {
471
- filesystem_unlock (self );
472
- }
473
- return mp_obj_new_bool (!writable );
466
+ return mp_obj_new_bool (!filesystem_is_writable_by_python (self ));
474
467
}
475
468
STATIC MP_DEFINE_CONST_FUN_OBJ_1 (fat_vfs_getreadonly_obj , vfs_fat_getreadonly );
476
469
STATIC const mp_obj_property_t fat_vfs_readonly_obj = {
@@ -494,10 +487,9 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(fat_vfs_getlabel_obj, vfs_fat_getlabel);
494
487
495
488
STATIC mp_obj_t vfs_fat_setlabel (mp_obj_t self_in , mp_obj_t label_in ) {
496
489
fs_user_mount_t * self = MP_OBJ_TO_PTR (self_in );
490
+ verify_fs_writable (self );
497
491
const char * label_str = mp_obj_str_get_str (label_in );
498
- filesystem_lock_raise (self );
499
492
FRESULT res = f_setlabel (& self -> fatfs , label_str );
500
- filesystem_unlock (self );
501
493
if (res != FR_OK ) {
502
494
if (res == FR_WRITE_PROTECTED ) {
503
495
mp_raise_msg (& mp_type_OSError , MP_ERROR_TEXT ("Read-only filesystem" ));
0 commit comments