@@ -116,11 +116,32 @@ STATIC mp_obj_t fat_vfs_mkdir(mp_obj_t vfs_in, mp_obj_t path_o) {
116116}
117117STATIC MP_DEFINE_CONST_FUN_OBJ_2 (fat_vfs_mkdir_obj , fat_vfs_mkdir );
118118
119+ /// Change current directory.
120+ STATIC mp_obj_t fat_vfs_chdir (mp_obj_t path_in ) {
121+ const char * path ;
122+ path = mp_obj_str_get_str (path_in );
123+
124+ FRESULT res = f_chdrive (path );
125+
126+ if (res == FR_OK ) {
127+ res = f_chdir (path );
128+ }
129+
130+ if (res != FR_OK ) {
131+ nlr_raise (mp_obj_new_exception_arg1 (& mp_type_OSError ,
132+ MP_OBJ_NEW_SMALL_INT (fresult_to_errno_table [res ])));
133+ }
134+
135+ return mp_const_none ;
136+ }
137+ STATIC MP_DEFINE_CONST_FUN_OBJ_1 (fat_vfs_chdir_obj , fat_vfs_chdir );
138+
119139STATIC const mp_rom_map_elem_t fat_vfs_locals_dict_table [] = {
120140 { MP_ROM_QSTR (MP_QSTR_mkfs ), MP_ROM_PTR (& fat_vfs_mkfs_obj ) },
121141 { MP_ROM_QSTR (MP_QSTR_open ), MP_ROM_PTR (& fat_vfs_open_obj ) },
122142 { MP_ROM_QSTR (MP_QSTR_listdir ), MP_ROM_PTR (& fat_vfs_listdir_obj ) },
123143 { MP_ROM_QSTR (MP_QSTR_mkdir ), MP_ROM_PTR (& fat_vfs_mkdir_obj ) },
144+ { MP_ROM_QSTR (MP_QSTR_chdir ), MP_ROM_PTR (& fat_vfs_chdir_obj ) },
124145 { MP_ROM_QSTR (MP_QSTR_remove ), MP_ROM_PTR (& fat_vfs_remove_obj ) },
125146 { MP_ROM_QSTR (MP_QSTR_rename ), MP_ROM_PTR (& fat_vfs_rename_obj ) },
126147};
0 commit comments