_Py_wreadlink() uses _Py_char2wchar() to decode the result, to support

surrogate characters.
This commit is contained in:
Victor Stinner 2010-10-16 22:47:37 +00:00
parent 9d396399da
commit 3f711f4a3e

View File

@ -307,6 +307,7 @@ _Py_wreadlink(const wchar_t *path, wchar_t *buf, size_t bufsiz)
{
char *cpath;
char cbuf[PATH_MAX];
wchar_t *wbuf;
int res;
size_t r1;
@ -324,11 +325,15 @@ _Py_wreadlink(const wchar_t *path, wchar_t *buf, size_t bufsiz)
return -1;
}
cbuf[res] = '\0'; /* buf will be null terminated */
r1 = mbstowcs(buf, cbuf, bufsiz);
if (r1 == -1) {
wbuf = _Py_char2wchar(cbuf);
r1 = wcslen(wbuf);
if (bufsiz <= r1) {
PyMem_Free(wbuf);
errno = EINVAL;
return -1;
}
wcsncpy(buf, wbuf, bufsiz);
PyMem_Free(wbuf);
return (int)r1;
}
#endif