mirror of
https://github.com/python/cpython.git
synced 2025-08-25 11:15:02 +00:00
Make ntpath compress multiple slashes between drive letter and the rest of the
path. Also clarifies UNC handling and adds appropriate tests. Applies patch #988607 to fix bug #980327. Thanks Paul Moore.
This commit is contained in:
parent
85064ffd76
commit
bdc36273a2
3 changed files with 28 additions and 9 deletions
|
@ -440,9 +440,25 @@ def normpath(path):
|
|||
"""Normalize path, eliminating double slashes, etc."""
|
||||
path = path.replace("/", "\\")
|
||||
prefix, path = splitdrive(path)
|
||||
while path[:1] == "\\":
|
||||
prefix = prefix + "\\"
|
||||
path = path[1:]
|
||||
# We need to be careful here. If the prefix is empty, and the path starts
|
||||
# with a backslash, it could either be an absolute path on the current
|
||||
# drive (\dir1\dir2\file) or a UNC filename (\\server\mount\dir1\file). It
|
||||
# is therefore imperative NOT to collapse multiple backslashes blindly in
|
||||
# that case.
|
||||
# The code below preserves multiple backslashes when there is no drive
|
||||
# letter. This means that the invalid filename \\\a\b is preserved
|
||||
# unchanged, where a\\\b is normalised to a\b. It's not clear that there
|
||||
# is any better behaviour for such edge cases.
|
||||
if prefix == '':
|
||||
# No drive letter - preserve initial backslashes
|
||||
while path[:1] == "\\":
|
||||
prefix = prefix + "\\"
|
||||
path = path[1:]
|
||||
else:
|
||||
# We have a drive letter - collapse initial backslashes
|
||||
if path.startswith("\\"):
|
||||
prefix = prefix + "\\"
|
||||
path = path.lstrip("\\")
|
||||
comps = path.split("\\")
|
||||
i = 0
|
||||
while i < len(comps):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue