Skip to content

Commit 58fad81

Browse files
committed
ports:unix:modos: add an implementation of realpath
1 parent f7ef932 commit 58fad81

1 file changed

Lines changed: 14 additions & 0 deletions

File tree

ports/unix/modos.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,19 @@ STATIC mp_obj_t mod_os_getenv(mp_obj_t var_in) {
179179
}
180180
MP_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+
182195
STATIC 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

Comments
 (0)