mirror of
https://github.com/python/cpython.git
synced 2025-07-08 03:45:36 +00:00
gh-126780: Fix ntpath.normpath()
for drive-relative paths (GH-126801)
This commit is contained in:
parent
0c5556fcb7
commit
60ec854bc2
4 changed files with 34 additions and 25 deletions
|
@ -2506,37 +2506,38 @@ _Py_normpath_and_size(wchar_t *path, Py_ssize_t size, Py_ssize_t *normsize)
|
|||
#endif
|
||||
#define SEP_OR_END(x) (IS_SEP(x) || IS_END(x))
|
||||
|
||||
if (p1[0] == L'.' && IS_SEP(&p1[1])) {
|
||||
// Skip leading '.\'
|
||||
path = &path[2];
|
||||
while (IS_SEP(path)) {
|
||||
path++;
|
||||
}
|
||||
p1 = p2 = minP2 = path;
|
||||
lastC = SEP;
|
||||
}
|
||||
else {
|
||||
Py_ssize_t drvsize, rootsize;
|
||||
_Py_skiproot(path, size, &drvsize, &rootsize);
|
||||
if (drvsize || rootsize) {
|
||||
// Skip past root and update minP2
|
||||
p1 = &path[drvsize + rootsize];
|
||||
Py_ssize_t drvsize, rootsize;
|
||||
_Py_skiproot(path, size, &drvsize, &rootsize);
|
||||
if (drvsize || rootsize) {
|
||||
// Skip past root and update minP2
|
||||
p1 = &path[drvsize + rootsize];
|
||||
#ifndef ALTSEP
|
||||
p2 = p1;
|
||||
p2 = p1;
|
||||
#else
|
||||
for (; p2 < p1; ++p2) {
|
||||
if (*p2 == ALTSEP) {
|
||||
*p2 = SEP;
|
||||
}
|
||||
for (; p2 < p1; ++p2) {
|
||||
if (*p2 == ALTSEP) {
|
||||
*p2 = SEP;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
minP2 = p2 - 1;
|
||||
lastC = *minP2;
|
||||
minP2 = p2 - 1;
|
||||
lastC = *minP2;
|
||||
#ifdef MS_WINDOWS
|
||||
if (lastC != SEP) {
|
||||
minP2++;
|
||||
}
|
||||
if (lastC != SEP) {
|
||||
minP2++;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if (p1[0] == L'.' && SEP_OR_END(&p1[1])) {
|
||||
// Skip leading '.\'
|
||||
lastC = *++p1;
|
||||
#ifdef ALTSEP
|
||||
if (lastC == ALTSEP) {
|
||||
lastC = SEP;
|
||||
}
|
||||
#endif
|
||||
while (IS_SEP(p1)) {
|
||||
p1++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue