@@ -89,10 +89,27 @@ STATIC mp_obj_t fat_vfs_remove(mp_obj_t vfs_in, mp_obj_t path_in) {
8989}
9090STATIC MP_DEFINE_CONST_FUN_OBJ_2 (fat_vfs_remove_obj , fat_vfs_remove );
9191
92+ STATIC mp_obj_t fat_vfs_mkdir (mp_obj_t vfs_in , mp_obj_t path_o ) {
93+ (void )vfs_in ;
94+ const char * path = mp_obj_str_get_str (path_o );
95+ FRESULT res = f_mkdir (path );
96+ switch (res ) {
97+ case FR_OK :
98+ return mp_const_none ;
99+ case FR_EXIST :
100+ // TODO should be FileExistsError
101+ nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_OSError , "File exists: '%s'" , path ));
102+ default :
103+ nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_OSError , "Error creating directory '%s'" , path ));
104+ }
105+ }
106+ STATIC MP_DEFINE_CONST_FUN_OBJ_2 (fat_vfs_mkdir_obj , fat_vfs_mkdir );
107+
92108STATIC const mp_rom_map_elem_t fat_vfs_locals_dict_table [] = {
93109 { MP_ROM_QSTR (MP_QSTR_mkfs ), MP_ROM_PTR (& fat_vfs_mkfs_obj ) },
94110 { MP_ROM_QSTR (MP_QSTR_open ), MP_ROM_PTR (& fat_vfs_open_obj ) },
95111 { MP_ROM_QSTR (MP_QSTR_listdir ), MP_ROM_PTR (& fat_vfs_listdir_obj ) },
112+ { MP_ROM_QSTR (MP_QSTR_mkdir ), MP_ROM_PTR (& fat_vfs_mkdir_obj ) },
96113 { MP_ROM_QSTR (MP_QSTR_remove ), MP_ROM_PTR (& fat_vfs_remove_obj ) },
97114};
98115STATIC MP_DEFINE_CONST_DICT (fat_vfs_locals_dict , fat_vfs_locals_dict_table );
0 commit comments