diff --git a/python/port/genhdr/qstrdefs.in.h b/python/port/genhdr/qstrdefs.in.h index 42a97091b..8db9261c0 100644 --- a/python/port/genhdr/qstrdefs.in.h +++ b/python/port/genhdr/qstrdefs.in.h @@ -534,4 +534,5 @@ Q(nodename) Q(release) Q(version) Q(machine) +Q(rename) diff --git a/python/port/mod/os/modos.cpp b/python/port/mod/os/modos.cpp index fe6576a39..d78b92c45 100644 --- a/python/port/mod/os/modos.cpp +++ b/python/port/mod/os/modos.cpp @@ -62,3 +62,39 @@ mp_obj_t modos_remove(mp_obj_t o_file_name) { return mp_const_none; } +mp_obj_t modos_rename(mp_obj_t o_old_name, mp_obj_t o_new_name) { + + size_t len; + const char* old_name; + const char* new_name; + old_name = mp_obj_str_get_data(o_old_name, &len); + new_name = mp_obj_str_get_data(o_new_name, &len); + + Ion::Storage::Record record = Ion::Storage::sharedStorage()->recordNamed(old_name); + + if (record == Ion::Storage::Record()) { + mp_raise_OSError(2); + } + + Ion::Storage::Record::ErrorStatus status = record.setName(new_name); + + switch (status) { + case Ion::Storage::Record::ErrorStatus::NameTaken: + mp_raise_OSError(17); + break; + case Ion::Storage::Record::ErrorStatus::NotEnoughSpaceAvailable: + mp_raise_OSError(28); + break; + case Ion::Storage::Record::ErrorStatus::NonCompliantName: + mp_raise_OSError(22); + break; + case Ion::Storage::Record::ErrorStatus::RecordDoesNotExist: + mp_raise_OSError(2); + break; + default: + break; + } + + return mp_const_none; +} + diff --git a/python/port/mod/os/modos.h b/python/port/mod/os/modos.h index cc7068952..097473530 100644 --- a/python/port/mod/os/modos.h +++ b/python/port/mod/os/modos.h @@ -2,3 +2,4 @@ mp_obj_t modos_uname(); mp_obj_t modos_remove(mp_obj_t o_file_name); +mp_obj_t modos_rename(mp_obj_t o_old_name, mp_obj_t o_new_name); diff --git a/python/port/mod/os/modos_table.c b/python/port/mod/os/modos_table.c index 7aa5663e5..7562a95b8 100644 --- a/python/port/mod/os/modos_table.c +++ b/python/port/mod/os/modos_table.c @@ -2,11 +2,13 @@ MP_DEFINE_CONST_FUN_OBJ_0(modos_uname_obj, modos_uname); MP_DEFINE_CONST_FUN_OBJ_1(modos_remove_obj, modos_remove); +MP_DEFINE_CONST_FUN_OBJ_2(modos_rename_obj, modos_rename); STATIC const mp_rom_map_elem_t modos_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_os) }, { MP_ROM_QSTR(MP_QSTR_uname), &modos_uname_obj}, { MP_ROM_QSTR(MP_QSTR_remove), &modos_remove_obj}, + { MP_ROM_QSTR(MP_QSTR_rename), &modos_rename_obj}, }; STATIC MP_DEFINE_CONST_DICT(modos_module_globals, modos_module_globals_table);