summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--py/builtinimport.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/py/builtinimport.c b/py/builtinimport.c
index a578d4ad2..aa31b69db 100644
--- a/py/builtinimport.c
+++ b/py/builtinimport.c
@@ -45,6 +45,15 @@
#define DEBUG_printf(...) (void)0
#endif
+#if MICROPY_MODULE_WEAK_LINKS
+STATIC qstr make_weak_link_name(vstr_t *buffer, qstr name) {
+ vstr_reset(buffer);
+ vstr_add_char(buffer, 'u');
+ vstr_add_str(buffer, qstr_str(name));
+ return qstr_from_strn(buffer->buf, buffer->len);
+}
+#endif
+
#if MICROPY_ENABLE_EXTERNAL_IMPORT
// Must be a string of one byte.
@@ -367,10 +376,7 @@ STATIC mp_obj_t process_import_at_level(qstr full_mod_name, qstr level_mod_name,
// formerly known as "weak links").
#if MICROPY_MODULE_WEAK_LINKS
if (stat == MP_IMPORT_STAT_NO_EXIST && module_obj == MP_OBJ_NULL) {
- char *umodule_buf = vstr_str(path);
- umodule_buf[0] = 'u';
- strcpy(umodule_buf + 1, qstr_str(level_mod_name));
- qstr umodule_name = qstr_from_str(umodule_buf);
+ qstr umodule_name = make_weak_link_name(path, level_mod_name);
module_obj = mp_module_get_builtin(umodule_name);
}
#elif MICROPY_PY_SYS
@@ -581,10 +587,8 @@ mp_obj_t mp_builtin___import___default(size_t n_args, const mp_obj_t *args) {
#if MICROPY_MODULE_WEAK_LINKS
// Check if there is a weak link to this module
- char umodule_buf[MICROPY_ALLOC_PATH_MAX];
- umodule_buf[0] = 'u';
- strcpy(umodule_buf + 1, args[0]);
- qstr umodule_name_qstr = qstr_from_str(umodule_buf);
+ VSTR_FIXED(umodule_path, MICROPY_ALLOC_PATH_MAX);
+ qstr umodule_name_qstr = make_weak_link_name(&umodule_path, module_name_qstr);
module_obj = mp_module_get_loaded_or_builtin(umodule_name_qstr);
if (module_obj != MP_OBJ_NULL) {
return module_obj;