@@ -429,6 +429,18 @@ STATIC mp_obj_t vfs_fat_utime(mp_obj_t vfs_in, mp_obj_t path_in, mp_obj_t times_
429
429
}
430
430
STATIC MP_DEFINE_CONST_FUN_OBJ_3 (fat_vfs_utime_obj , vfs_fat_utime );
431
431
432
+ STATIC mp_obj_t vfs_fat_getreadonly (mp_obj_t self_in ) {
433
+ fs_user_mount_t * self = MP_OBJ_TO_PTR (self_in );
434
+ return mp_obj_new_bool (!filesystem_is_writable_by_python (self ));
435
+ }
436
+ STATIC MP_DEFINE_CONST_FUN_OBJ_1 (fat_vfs_getreadonly_obj , vfs_fat_getreadonly );
437
+ STATIC const mp_obj_property_t fat_vfs_readonly_obj = {
438
+ .base .type = & mp_type_property ,
439
+ .proxy = {(mp_obj_t )& fat_vfs_getreadonly_obj ,
440
+ MP_ROM_NONE ,
441
+ MP_ROM_NONE },
442
+ };
443
+
432
444
#if MICROPY_FATFS_USE_LABEL
433
445
STATIC mp_obj_t vfs_fat_getlabel (mp_obj_t self_in ) {
434
446
fs_user_mount_t * self = MP_OBJ_TO_PTR (self_in );
@@ -481,6 +493,7 @@ STATIC const mp_rom_map_elem_t fat_vfs_locals_dict_table[] = {
481
493
{ MP_ROM_QSTR (MP_QSTR_mount ), MP_ROM_PTR (& vfs_fat_mount_obj ) },
482
494
{ MP_ROM_QSTR (MP_QSTR_umount ), MP_ROM_PTR (& fat_vfs_umount_obj ) },
483
495
{ MP_ROM_QSTR (MP_QSTR_utime ), MP_ROM_PTR (& fat_vfs_utime_obj ) },
496
+ { MP_ROM_QSTR (MP_QSTR_readonly ), MP_ROM_PTR (& fat_vfs_readonly_obj ) },
484
497
#if MICROPY_FATFS_USE_LABEL
485
498
{ MP_ROM_QSTR (MP_QSTR_label ), MP_ROM_PTR (& fat_vfs_label_obj ) },
486
499
#endif
0 commit comments