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

> I'm not sure if "}" could ever be valid drive letter

The Windows file API is designed in a way to support almost any Unicode BMP 
character in a DOS drive designation. For example, the following creates "{:" 
as a substitute drive for "C:\\Temp":

    >>> DefineDosDevice(0, '{:', 'C:\\Temp')

Drive "{:" has a working directory:

    >>> os.mkdir('{:/Eggs')
    >>> os.chdir('{:/Eggs')
    >>> os.chdir('C:/')
    >>> ntpath.abspath('{:')
    '{:\\Eggs'

The latter is based on a hidden environment variable named "={:", which WinAPI 
GetFullPathNameW consumes:

    >>> GetEnvironmentVariable('={:')
    '{:\\Eggs'

That said, only drive letters A-Z count for WinAPI GetLogicalDrives and 
GetLogicalDriveStrings, and these are the only drive names that can be assigned 
normally. So it's not important to handle "{:" as a drive. Whatever makes the 
code simpler. 

> ":" can definitely be used in filenames.

Colon is allowed in filepaths, such as in device names and stream designations, 
but most filesystems do not allow colon in filenames. Exceptions include the 
named-pipe filesystem and some redirectors for non-native filesystems, such as 
the VirtualBox shared-folder filesystem. 

The Windows API reserves colon as the delimiter for file streams [1]. In stream 
designations such as "filename:streamname:streamtype", the colon is not part of 
the filename, stream name, or stream type name.

"{:3" could be a file named "{" with a data stream named "3". (The "DATA$" 
stream type is implicit.) The workaround for accessing a named stream in a file 
with a single-character filename is to use an explicitly relative path such as 
"./{:3". This works fine with ntpath.join:

    >>> ntpath.join('3', './{:3')
    '3\\./{:3'
    >>> ntpath.normpath(ntpath.join('3', './{:3'))
    '3\\{:3'

---

[1] https://docs.microsoft.com/en-us/windows/win32/fileio/file-streams

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

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

Reply via email to