summaryrefslogtreecommitdiff
path: root/Python/importdl.c
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2015-05-29 17:11:36 -0500
committerBenjamin Peterson <benjamin@python.org>2015-05-29 17:11:36 -0500
commit0c70ca9aacde6fc58afc211493fa178a27cf8866 (patch)
treee9e0dacd4e50bbf74fdfdf180b34df384d4258c5 /Python/importdl.c
parent07739f3555fc1a4691defa5b339633689c9d926c (diff)
parente20056c8f71a8e289016c0cbd5adb5826cd91f64 (diff)
downloadcpython-git-0c70ca9aacde6fc58afc211493fa178a27cf8866.tar.gz
merge 3.5 (#24328)
Diffstat (limited to 'Python/importdl.c')
-rw-r--r--Python/importdl.c19
1 files changed, 9 insertions, 10 deletions
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);