Eryk Sun <[email protected]> added the comment:
For issue 7909, ntpath.normpath was modified to return the path unchanged if it
begins with exactly either "\\\\.\\" or "\\\\?\\". Normalization is not
skipped, however, if the prefix has one or more forward slashes instead of all
backslashes. In this case, we can see that the old issue (e.g. \\.\nul ->
\\nul) is no longer a problem.
>>> os.path.normpath('//./nul')
'\\\\.\\nul'
Thus we can and should remove the check for `special_prefixes`.
Not normalizing local-device paths is inconsistent with WINAPI GetFullPathNameW
(i.e. ntpath.abspath in Windows). Local-device paths are always normalized by
the system when it's explicitly requested to do so. \\?\ local-device paths
(with only backslash in the prefix) are only special cased to bypass
normalization when creating or opening a file.
Also, it probably needs a separate issue, but ntpath.normpath should strip
trailing spaces and dots from the final (or only) component for the sake of
consistency with ntpath.abspath in Windows (where it calls GetFullPathNameW).
For example:
>>> os.path.normpath(r'//?/C:\test . . .')
'\\\\?\\C:\\test . . .'
>>> os.path.abspath(r'//?/C:\test . . .')
'\\\\?\\C:\\test'
This normalization rule is common to all path types and all Windows versions.
It should be supported for both ntpath.normpath and ntpath.abspath when called
on a non-Windows platform. If an actual file or directory name ends with
trailing dots and spaces, it is not a normal Windows path, and it should not be
normalized.
----------
nosy: +eryksun
versions: +Python 3.7, Python 3.8 -Python 3.3
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue15286>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com