3030
3131#define mp_obj_fat_vfs_t fs_user_mount_t
3232
33+ // Factoring this common call saves about 90 bytes.
34+ STATIC NORETURN void mp_raise_OSError_fresult (FRESULT res ) {
35+ mp_raise_OSError (fresult_to_errno_table [res ]);
36+ }
37+
3338STATIC mp_import_stat_t fat_vfs_import_stat (void * vfs_in , const char * path ) {
3439 fs_user_mount_t * vfs = vfs_in ;
3540 FILINFO fno ;
@@ -64,7 +69,7 @@ STATIC mp_obj_t fat_vfs_make_new(const mp_obj_type_t *type, size_t n_args, size_
6469 // don't error out if no filesystem, to let mkfs()/mount() create one if wanted
6570 vfs -> blockdev .flags |= MP_BLOCKDEV_FLAG_NO_FILESYSTEM ;
6671 } else if (res != FR_OK ) {
67- mp_raise_OSError ( fresult_to_errno_table [ res ] );
72+ mp_raise_OSError_fresult ( res );
6873 }
6974
7075 return MP_OBJ_FROM_PTR (vfs );
@@ -97,7 +102,7 @@ STATIC mp_obj_t fat_vfs_mkfs(mp_obj_t bdev_in) {
97102 res = f_mkfs (& vfs -> fatfs , FM_FAT32 , 0 , working_buf , sizeof (working_buf ));
98103 }
99104 if (res != FR_OK ) {
100- mp_raise_OSError ( fresult_to_errno_table [ res ] );
105+ mp_raise_OSError_fresult ( res );
101106 }
102107
103108 return mp_const_none ;
@@ -172,7 +177,7 @@ STATIC mp_obj_t fat_vfs_ilistdir_func(size_t n_args, const mp_obj_t *args) {
172177 iter -> is_str = is_str_type ;
173178 FRESULT res = f_opendir (& self -> fatfs , & iter -> dir , path );
174179 if (res != FR_OK ) {
175- mp_raise_OSError ( fresult_to_errno_table [ res ] );
180+ mp_raise_OSError_fresult ( res );
176181 }
177182
178183 return MP_OBJ_FROM_PTR (iter );
@@ -188,15 +193,15 @@ STATIC mp_obj_t fat_vfs_remove_internal(mp_obj_t vfs_in, mp_obj_t path_in, mp_in
188193 FRESULT res = f_stat (& self -> fatfs , path , & fno );
189194
190195 if (res != FR_OK ) {
191- mp_raise_OSError ( fresult_to_errno_table [ res ] );
196+ mp_raise_OSError_fresult ( res );
192197 }
193198
194199 // check if path is a file or directory
195200 if ((fno .fattrib & AM_DIR ) == attr ) {
196201 res = f_unlink (& self -> fatfs , path );
197202
198203 if (res != FR_OK ) {
199- mp_raise_OSError ( fresult_to_errno_table [ res ] );
204+ mp_raise_OSError_fresult ( res );
200205 }
201206 return mp_const_none ;
202207 } else {
@@ -226,7 +231,7 @@ STATIC mp_obj_t fat_vfs_rename(mp_obj_t vfs_in, mp_obj_t path_in, mp_obj_t path_
226231 FILINFO fno ;
227232 FRESULT res = f_stat (& self -> fatfs , old_path , & fno );
228233 if (res != FR_OK ) {
229- mp_raise_OSError ( fresult_to_errno_table [ res ] );
234+ mp_raise_OSError_fresult ( res );
230235 }
231236 if ((fno .fattrib & AM_DIR ) != 0 &&
232237 strlen (new_path ) > strlen (old_path ) &&
@@ -245,7 +250,7 @@ STATIC mp_obj_t fat_vfs_rename(mp_obj_t vfs_in, mp_obj_t path_in, mp_obj_t path_
245250 if (res == FR_OK ) {
246251 return mp_const_none ;
247252 } else {
248- mp_raise_OSError ( fresult_to_errno_table [ res ] );
253+ mp_raise_OSError_fresult ( res );
249254 }
250255
251256}
@@ -259,7 +264,7 @@ STATIC mp_obj_t fat_vfs_mkdir(mp_obj_t vfs_in, mp_obj_t path_o) {
259264 if (res == FR_OK ) {
260265 return mp_const_none ;
261266 } else {
262- mp_raise_OSError ( fresult_to_errno_table [ res ] );
267+ mp_raise_OSError_fresult ( res );
263268 }
264269}
265270STATIC MP_DEFINE_CONST_FUN_OBJ_2 (fat_vfs_mkdir_obj , fat_vfs_mkdir );
@@ -273,7 +278,7 @@ STATIC mp_obj_t fat_vfs_chdir(mp_obj_t vfs_in, mp_obj_t path_in) {
273278 FRESULT res = f_chdir (& self -> fatfs , path );
274279
275280 if (res != FR_OK ) {
276- mp_raise_OSError ( fresult_to_errno_table [ res ] );
281+ mp_raise_OSError_fresult ( res );
277282 }
278283
279284 return mp_const_none ;
@@ -286,7 +291,7 @@ STATIC mp_obj_t fat_vfs_getcwd(mp_obj_t vfs_in) {
286291 char buf [MICROPY_ALLOC_PATH_MAX + 1 ];
287292 FRESULT res = f_getcwd (& self -> fatfs , buf , sizeof (buf ));
288293 if (res != FR_OK ) {
289- mp_raise_OSError ( fresult_to_errno_table [ res ] );
294+ mp_raise_OSError_fresult ( res );
290295 }
291296 return mp_obj_new_str (buf , strlen (buf ));
292297}
@@ -307,7 +312,7 @@ STATIC mp_obj_t fat_vfs_stat(mp_obj_t vfs_in, mp_obj_t path_in) {
307312 } else {
308313 FRESULT res = f_stat (& self -> fatfs , path , & fno );
309314 if (res != FR_OK ) {
310- mp_raise_OSError ( fresult_to_errno_table [ res ] );
315+ mp_raise_OSError_fresult ( res );
311316 }
312317 }
313318
@@ -357,7 +362,7 @@ STATIC mp_obj_t fat_vfs_statvfs(mp_obj_t vfs_in, mp_obj_t path_in) {
357362 FATFS * fatfs = & self -> fatfs ;
358363 FRESULT res = f_getfree (fatfs , & nclst );
359364 if (FR_OK != res ) {
360- mp_raise_OSError ( fresult_to_errno_table [ res ] );
365+ mp_raise_OSError_fresult ( res );
361366 }
362367
363368 mp_obj_tuple_t * t = MP_OBJ_TO_PTR (mp_obj_new_tuple (10 , NULL ));
@@ -395,7 +400,7 @@ STATIC mp_obj_t vfs_fat_mount(mp_obj_t self_in, mp_obj_t readonly, mp_obj_t mkfs
395400 res = f_mkfs (& self -> fatfs , FM_FAT | FM_SFD , 0 , working_buf , sizeof (working_buf ));
396401 }
397402 if (res != FR_OK ) {
398- mp_raise_OSError ( fresult_to_errno_table [ res ] );
403+ mp_raise_OSError_fresult ( res );
399404 }
400405 self -> blockdev .flags &= ~MP_BLOCKDEV_FLAG_NO_FILESYSTEM ;
401406
@@ -416,7 +421,7 @@ STATIC mp_obj_t vfs_fat_getlabel(mp_obj_t self_in) {
416421 char working_buf [12 ];
417422 FRESULT res = f_getlabel (& self -> fatfs , working_buf , NULL );
418423 if (res != FR_OK ) {
419- mp_raise_OSError ( fresult_to_errno_table [ res ] );
424+ mp_raise_OSError_fresult ( res );
420425 }
421426 return mp_obj_new_str (working_buf , strlen (working_buf ));
422427}
@@ -431,7 +436,7 @@ STATIC mp_obj_t vfs_fat_setlabel(mp_obj_t self_in, mp_obj_t label_in) {
431436 if (res == FR_WRITE_PROTECTED ) {
432437 mp_raise_msg (& mp_type_OSError , MP_ERROR_TEXT ("Read-only filesystem" ));
433438 }
434- mp_raise_OSError ( fresult_to_errno_table [ res ] );
439+ mp_raise_OSError_fresult ( res );
435440 }
436441 return mp_const_none ;
437442}
0 commit comments