@@ -179,6 +179,19 @@ STATIC mp_obj_t mod_os_getenv(mp_obj_t var_in) {
179179}
180180MP_DEFINE_CONST_FUN_OBJ_1 (mod_os_getenv_obj , mod_os_getenv );
181181
182+ STATIC mp_obj_t mod_os_realpath (mp_obj_t var_in ) {
183+ char s [PATH_MAX ];
184+ const char * ret = realpath (mp_obj_str_get_str (var_in ), s );
185+ if (ret == NULL ) {
186+ if (errno ) {
187+ mp_raise_OSError (errno );
188+ }
189+ return mp_const_none ;
190+ }
191+ return mp_obj_new_str (ret , strlen (ret ));
192+ }
193+ MP_DEFINE_CONST_FUN_OBJ_1 (mod_os_realpath_obj , mod_os_realpath );
194+
182195STATIC mp_obj_t mod_os_putenv (mp_obj_t key_in , mp_obj_t value_in ) {
183196 const char * key = mp_obj_str_get_str (key_in );
184197 const char * value = mp_obj_str_get_str (value_in );
@@ -321,6 +334,7 @@ STATIC const mp_rom_map_elem_t mp_module_os_globals_table[] = {
321334 { MP_ROM_QSTR (MP_QSTR_unsetenv ), MP_ROM_PTR (& mod_os_unsetenv_obj ) },
322335 { MP_ROM_QSTR (MP_QSTR_mkdir ), MP_ROM_PTR (& mod_os_mkdir_obj ) },
323336 { MP_ROM_QSTR (MP_QSTR_ilistdir ), MP_ROM_PTR (& mod_os_ilistdir_obj ) },
337+ { MP_ROM_QSTR (MP_QSTR_realpath ), MP_ROM_PTR (& mod_os_realpath_obj ) },
324338 #if MICROPY_PY_OS_DUPTERM
325339 { MP_ROM_QSTR (MP_QSTR_dupterm ), MP_ROM_PTR (& mp_uos_dupterm_obj ) },
326340 #endif
0 commit comments