From e20056c8f71a8e289016c0cbd5adb5826cd91f64 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Fri, 29 May 2015 17:10:30 -0500 Subject: fix importing one char extension modules (closes #24328) --- Python/importdl.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) (limited to 'Python/importdl.c') diff --git a/Python/importdl.c b/Python/importdl.c index 579d2c5fad..1aa585d5e8 100644 --- a/Python/importdl.c +++ b/Python/importdl.c @@ -34,10 +34,11 @@ static const char *nonascii_prefix = "PyInitU"; */ static PyObject * get_encoded_name(PyObject *name, const char **hook_prefix) { - char *buf; PyObject *tmp; PyObject *encoded = NULL; - Py_ssize_t name_len, lastdot, i; + PyObject *modname = NULL; + Py_ssize_t name_len, lastdot; + _Py_IDENTIFIER(replace); /* Get the short name (substring after last dot) */ name_len = PyUnicode_GetLength(name); @@ -71,16 +72,14 @@ get_encoded_name(PyObject *name, const char **hook_prefix) { } } - buf = PyBytes_AS_STRING(encoded); - assert(Py_REFCNT(encoded) == 1); - for (i = 0; i < PyBytes_GET_SIZE(encoded) + 1; i++) { - if (buf[i] == '-') { - buf[i] = '_'; - } - } + /* Replace '-' by '_' */ + modname = _PyObject_CallMethodId(encoded, &PyId_replace, "cc", '-', '_'); + if (modname == NULL) + goto error; Py_DECREF(name); - return encoded; + Py_DECREF(encoded); + return modname; error: Py_DECREF(name); Py_XDECREF(encoded); -- cgit v1.2.1