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

surrogate characters.
This commit is contained in:
Victor Stinner 2010-10-16 22:55:47 +00:00
parent 350147b5ca
commit 0a1b8cba90
1 changed files with 12 additions and 2 deletions

View File

@ -353,6 +353,7 @@ _Py_wrealpath(const wchar_t *path,
{
char *cpath;
char cresolved_path[PATH_MAX];
wchar_t *wresolved_path;
char *res;
size_t r;
cpath = _Py_wchar2char(path);
@ -364,11 +365,20 @@ _Py_wrealpath(const wchar_t *path,
PyMem_Free(cpath);
if (res == NULL)
return NULL;
r = mbstowcs(resolved_path, cresolved_path, resolved_path_size);
if (r == (size_t)-1 || r >= PATH_MAX) {
wresolved_path = _Py_char2wchar(cresolved_path);
if (wresolved_path == NULL) {
errno = EINVAL;
return NULL;
}
r = wcslen(wresolved_path);
if (resolved_path_size <= r) {
PyMem_Free(wresolved_path);
errno = EINVAL;
return NULL;
}
wcsncpy(resolved_path, wresolved_path, resolved_path_size);
PyMem_Free(wresolved_path);
return resolved_path;
}
#endif