@@ -98,8 +98,8 @@ STATIC mp_obj_t fat_vfs_make_new(const mp_obj_type_t *type, size_t n_args, size_
9898 return MP_OBJ_FROM_PTR (vfs );
9999}
100100
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 )) {
103103 mp_raise_OSError (MP_EROFS );
104104 }
105105}
@@ -218,6 +218,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(fat_vfs_ilistdir_obj, 1, 2, fat_vfs_i
218218
219219STATIC mp_obj_t fat_vfs_remove_internal (mp_obj_t vfs_in , mp_obj_t path_in , mp_int_t attr ) {
220220 mp_obj_fat_vfs_t * self = MP_OBJ_TO_PTR (vfs_in );
221+ verify_fs_writable (self );
221222 const char * path = mp_obj_str_get_str (path_in );
222223
223224 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
229230
230231 // check if path is a file or directory
231232 if ((fno .fattrib & AM_DIR ) == attr ) {
232- filesystem_lock_raise (self );
233233 res = f_unlink (& self -> fatfs , path );
234- filesystem_unlock (self );
235234
236235 if (res != FR_OK ) {
237236 mp_raise_OSError_fresult (res );
@@ -254,18 +253,17 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(fat_vfs_rmdir_obj, fat_vfs_rmdir);
254253
255254STATIC mp_obj_t fat_vfs_rename (mp_obj_t vfs_in , mp_obj_t path_in , mp_obj_t path_out ) {
256255 mp_obj_fat_vfs_t * self = MP_OBJ_TO_PTR (vfs_in );
256+ verify_fs_writable (self );
257257 const char * old_path = mp_obj_str_get_str (path_in );
258258 const char * new_path = mp_obj_str_get_str (path_out );
259259
260- filesystem_lock_raise (self );
261260 FRESULT res = f_rename (& self -> fatfs , old_path , new_path );
262261 if (res == FR_EXIST ) {
263262 // if new_path exists then try removing it (but only if it's a file)
264263 fat_vfs_remove_internal (vfs_in , path_out , 0 ); // 0 == file attribute
265264 // try to rename again
266265 res = f_rename (& self -> fatfs , old_path , new_path );
267266 }
268- filesystem_unlock (self );
269267 if (res == FR_OK ) {
270268 return mp_const_none ;
271269 } else {
@@ -277,10 +275,9 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(fat_vfs_rename_obj, fat_vfs_rename);
277275
278276STATIC mp_obj_t fat_vfs_mkdir (mp_obj_t vfs_in , mp_obj_t path_o ) {
279277 mp_obj_fat_vfs_t * self = MP_OBJ_TO_PTR (vfs_in );
278+ verify_fs_writable (self );
280279 const char * path = mp_obj_str_get_str (path_o );
281- filesystem_lock_raise (self );
282280 FRESULT res = f_mkdir (& self -> fatfs , path );
283- filesystem_unlock (self );
284281 if (res == FR_OK ) {
285282 return mp_const_none ;
286283 } else {
@@ -466,11 +463,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(fat_vfs_utime_obj, vfs_fat_utime);
466463
467464STATIC mp_obj_t vfs_fat_getreadonly (mp_obj_t self_in ) {
468465 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 ));
474467}
475468STATIC MP_DEFINE_CONST_FUN_OBJ_1 (fat_vfs_getreadonly_obj , vfs_fat_getreadonly );
476469STATIC 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);
494487
495488STATIC mp_obj_t vfs_fat_setlabel (mp_obj_t self_in , mp_obj_t label_in ) {
496489 fs_user_mount_t * self = MP_OBJ_TO_PTR (self_in );
490+ verify_fs_writable (self );
497491 const char * label_str = mp_obj_str_get_str (label_in );
498- filesystem_lock_raise (self );
499492 FRESULT res = f_setlabel (& self -> fatfs , label_str );
500- filesystem_unlock (self );
501493 if (res != FR_OK ) {
502494 if (res == FR_WRITE_PROTECTED ) {
503495 mp_raise_msg (& mp_type_OSError , MP_ERROR_TEXT ("Read-only filesystem" ));
0 commit comments