mirror of https://github.com/python/cpython
Issue #9246: On POSIX, os.getcwd() now supports paths longer than 1025 bytes
Patch written by William Orr.
This commit is contained in:
parent
9bdd61338d
commit
4403d7def0
|
@ -34,6 +34,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #9246: On POSIX, os.getcwd() now supports paths longer than 1025 bytes.
|
||||
Patch written by William Orr.
|
||||
|
||||
- Issue #23008: Fixed resolving attributes with boolean value is False in pydoc.
|
||||
|
||||
- Fix asyncio issue 235: LifoQueue and PriorityQueue's put didn't
|
||||
|
|
|
@ -3418,12 +3418,15 @@ posix_lchown(PyObject *self, PyObject *args)
|
|||
static PyObject *
|
||||
posix_getcwd(int use_bytes)
|
||||
{
|
||||
char buf[1026];
|
||||
char *res;
|
||||
char *buf, *tmpbuf;
|
||||
char *cwd;
|
||||
const size_t chunk = 1024;
|
||||
size_t buflen = 0;
|
||||
PyObject *obj;
|
||||
|
||||
#ifdef MS_WINDOWS
|
||||
if (!use_bytes) {
|
||||
wchar_t wbuf[1026];
|
||||
wchar_t wbuf[MAXPATHLEN];
|
||||
wchar_t *wbuf2 = wbuf;
|
||||
PyObject *resobj;
|
||||
DWORD len;
|
||||
|
@ -3457,14 +3460,31 @@ posix_getcwd(int use_bytes)
|
|||
return NULL;
|
||||
#endif
|
||||
|
||||
buf = cwd = NULL;
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
res = getcwd(buf, sizeof buf);
|
||||
do {
|
||||
buflen += chunk;
|
||||
tmpbuf = PyMem_RawRealloc(buf, buflen);
|
||||
if (tmpbuf == NULL)
|
||||
break;
|
||||
|
||||
buf = tmpbuf;
|
||||
cwd = getcwd(buf, buflen);
|
||||
} while (cwd == NULL && errno == ERANGE);
|
||||
Py_END_ALLOW_THREADS
|
||||
if (res == NULL)
|
||||
|
||||
if (cwd == NULL) {
|
||||
PyMem_RawFree(buf);
|
||||
return posix_error();
|
||||
}
|
||||
|
||||
if (use_bytes)
|
||||
return PyBytes_FromStringAndSize(buf, strlen(buf));
|
||||
return PyUnicode_DecodeFSDefault(buf);
|
||||
obj = PyBytes_FromStringAndSize(buf, strlen(buf));
|
||||
else
|
||||
obj = PyUnicode_DecodeFSDefault(buf);
|
||||
PyMem_RawFree(buf);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(posix_getcwd__doc__,
|
||||
|
|
Loading…
Reference in New Issue