Skip to content

Commit f12146c

Browse files
committed
extmod/vfs_fat: Add chdir() method.
Ported from stmhal.
1 parent 602305b commit f12146c

1 file changed

Lines changed: 21 additions & 0 deletions

File tree

extmod/vfs_fat.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,32 @@ STATIC mp_obj_t fat_vfs_mkdir(mp_obj_t vfs_in, mp_obj_t path_o) {
116116
}
117117
STATIC 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+
119139
STATIC 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

Comments
 (0)