diff --git a/mercurial/parsers.c b/mercurial/parsers.c --- a/mercurial/parsers.c +++ b/mercurial/parsers.c @@ -93,14 +93,14 @@ PyObject *unhexlify(const char *str, int return ret; } -static PyObject *asciilower(PyObject *self, PyObject *args) +static inline PyObject *_asciilower(PyObject *str_obj) { char *str, *newstr; - int i, len; + Py_ssize_t i, len; PyObject *newobj = NULL; - if (!PyArg_ParseTuple(args, "s#", &str, &len)) - goto quit; + str = PyBytes_AS_STRING(str_obj); + len = PyBytes_GET_SIZE(str_obj); newobj = PyBytes_FromStringAndSize(NULL, len); if (!newobj) @@ -127,6 +127,14 @@ quit: return NULL; } +static PyObject *asciilower(PyObject *self, PyObject *args) +{ + PyObject *str_obj; + if (!PyArg_ParseTuple(args, "O!:asciilower", &PyBytes_Type, &str_obj)) + return NULL; + return _asciilower(str_obj); +} + /* * This code assumes that a manifest is stitched together with newline * ('\n') characters.