Merged revisions 81170 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r81170 | victor.stinner | 2010-05-14 18:35:39 +0200 (ven., 14 mai 2010) | 6 lines posix_listdir(), posix_readlink(): avoid temporary PyBytes object Use directly PyUnicode_DecodeFSDefaultAndSize() instead of PyBytes_FromStringAndSize() + PyUnicode_FromEncodedObject() if the argument is unicode. ........
This commit is contained in:
parent
9076f9e187
commit
26a968d8fe
|
@ -2515,33 +2515,17 @@ posix_listdir(PyObject *self, PyObject *args)
|
||||||
(NAMLEN(ep) == 1 ||
|
(NAMLEN(ep) == 1 ||
|
||||||
(ep->d_name[1] == '.' && NAMLEN(ep) == 2)))
|
(ep->d_name[1] == '.' && NAMLEN(ep) == 2)))
|
||||||
continue;
|
continue;
|
||||||
|
if (arg_is_unicode)
|
||||||
|
v = PyUnicode_DecodeFSDefaultAndSize(ep->d_name, NAMLEN(ep));
|
||||||
|
else
|
||||||
v = PyBytes_FromStringAndSize(ep->d_name, NAMLEN(ep));
|
v = PyBytes_FromStringAndSize(ep->d_name, NAMLEN(ep));
|
||||||
if (v == NULL) {
|
if (v == NULL) {
|
||||||
Py_DECREF(d);
|
Py_CLEAR(d);
|
||||||
d = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (arg_is_unicode) {
|
|
||||||
PyObject *w;
|
|
||||||
|
|
||||||
w = PyUnicode_FromEncodedObject(v,
|
|
||||||
Py_FileSystemDefaultEncoding,
|
|
||||||
"surrogateescape");
|
|
||||||
Py_DECREF(v);
|
|
||||||
if (w != NULL)
|
|
||||||
v = w;
|
|
||||||
else {
|
|
||||||
/* Encoding failed to decode ASCII bytes.
|
|
||||||
Raise exception. */
|
|
||||||
Py_DECREF(d);
|
|
||||||
d = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (PyList_Append(d, v) != 0) {
|
if (PyList_Append(d, v) != 0) {
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
Py_DECREF(d);
|
Py_CLEAR(d);
|
||||||
d = NULL;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
|
@ -4676,22 +4660,10 @@ posix_readlink(PyObject *self, PyObject *args)
|
||||||
return posix_error_with_allocated_filename(opath);
|
return posix_error_with_allocated_filename(opath);
|
||||||
|
|
||||||
release_bytes(opath);
|
release_bytes(opath);
|
||||||
v = PyBytes_FromStringAndSize(buf, n);
|
if (arg_is_unicode)
|
||||||
if (arg_is_unicode) {
|
return PyUnicode_DecodeFSDefaultAndSize(buf, n);
|
||||||
PyObject *w;
|
else
|
||||||
|
return PyBytes_FromStringAndSize(buf, n);
|
||||||
w = PyUnicode_FromEncodedObject(v,
|
|
||||||
Py_FileSystemDefaultEncoding,
|
|
||||||
"surrogateescape");
|
|
||||||
if (w != NULL) {
|
|
||||||
Py_DECREF(v);
|
|
||||||
v = w;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
v = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
}
|
||||||
#endif /* HAVE_READLINK */
|
#endif /* HAVE_READLINK */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue