static PyObject *
getpath_basename(PyObject *Py_UNUSED(self), PyObject *args)
{
- const char *path;
- if (!PyArg_ParseTuple(args, "s", &path)) {
+ PyObject *path;
+ if (!PyArg_ParseTuple(args, "U", &path)) {
return NULL;
}
- const char *name = strrchr(path, SEP);
- return PyUnicode_FromString(name ? name + 1 : path);
+ Py_ssize_t end = PyUnicode_GET_LENGTH(path);
+ Py_ssize_t pos = PyUnicode_FindChar(path, SEP, 0, end, -1);
+ if (pos < 0) {
+ return Py_NewRef(path);
+ }
+ return PyUnicode_Substring(path, pos + 1, end);
}
static PyObject *
getpath_dirname(PyObject *Py_UNUSED(self), PyObject *args)
{
- const char *path;
- if (!PyArg_ParseTuple(args, "s", &path)) {
+ PyObject *path;
+ if (!PyArg_ParseTuple(args, "U", &path)) {
return NULL;
}
- const char *name = strrchr(path, SEP);
- if (!name) {
+ Py_ssize_t end = PyUnicode_GET_LENGTH(path);
+ Py_ssize_t pos = PyUnicode_FindChar(path, SEP, 0, end, -1);
+ if (pos < 0) {
return PyUnicode_FromStringAndSize(NULL, 0);
}
- return PyUnicode_FromStringAndSize(path, (name - path));
+ return PyUnicode_Substring(path, 0, pos);
}