Eryk Sun <eryk...@gmail.com> added the comment:

This is standard Windows API behavior for the final path component. A single 
dot component means the current directory. Two dots means the parent directory. 
More than two dots and/or trailing spaces, gets reduced to a single dot, 
meaning the current directory. For example:

    >>> os.path.abspath('.')
    'C:\\Temp'
    >>> os.path.abspath('..')
    'C:\\'
    >>> os.path.abspath('...')
    'C:\\Temp'
    >>> os.path.abspath('... ... ...')
    'C:\\Temp'

Specifically, os.path.isdir is implemented as nt._isdir, which calls WinAPI 
GetFileAttributes to check for FILE_ATTRIBUTE_DIRECTORY, which in turn calls 
the NT system function NtQueryAttributesFile. 

GetFileAttributes has to translate the DOS path to an NT kernel path. In the 
kernel, none of this "." business exists. The kernel doesn't even have a 
concept of a working directory. Depending on your Windows version, it might 
call the runtime library function RtlDosPathNameToNtPathName_U_WithStatus to 
convert the path to a native OBJECT_ATTRIBUTES record. The first step is to 
normalize the path via RtlGetFullPathName_Ustr, which is what the Windows API 
GetFullPathName function calls like in the above abspath() examples.

----------
nosy: +eryksun

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue31716>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to