Tcl Source Code

View Ticket
Login
Ticket UUID: 3389978
Title: Support for paths longer than MAX_PATH on Windows
Type: RFE Version: None
Submitter: zoro2 Created on: 2011-08-11 10:25:10
Subsystem: 37. File System Assigned To: jan.nijtmans
Priority: 5 Medium Severity: Minor
Status: Closed Last Modified: 2014-05-09 12:24:31
Resolution: Fixed Closed By: jan.nijtmans
    Closed on: 2014-05-09 12:24:31
Description:
Currently Tcl does not support extended paths and does not allow modifying its behavior to use it in certain cases. For example:

The following works fine:
% file mkdir //?/[pwd]/[string repeat Test 50]/[string repeat Test 50]

% llength [glob //?/[pwd]/[string repeat Test 50]/[string repeat Test 50]]
1
The following does not work:
% file mkdir [string repeat Test 50]/[string repeat Test 50]
can't create directory "TestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest/TestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest": no such file or directory
% llength [glob //?/[pwd]/[string repeat Test 50]/*]
couldn't read directory "\\?\D:\temp\TestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest/*": no such file or directory

While being a big rework, perhaps a review of which APIs should not be called as well as addition of \\?\ to full paths should be made to make Tcl support paths longer than MAX_PATH (260) characters?
User Comments: jan.nijtmans added on 2014-05-09 12:24:31:
Remark: extended paths only work with absolute paths (either with a drive prefix, either UNC paths), so you must use:

% file mkdir [pwd]/[string repeat Test 50]/[string repeat Test 50]
% glob [pwd]/[string repeat Test 50]/*
C:/Users/nijtmaj/TestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest/TestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTestTest
% length [glob [pwd]/[string repeat Test 50]/*]
invalid command name "length"
% string length [glob [pwd]/[string repeat Test 50]/*]
418

jan.nijtmans added on 2014-05-09 12:00:58:

Fixed in trunk: [34528a47d11a6b0ed08b50618fc932e12508e369|34528a47d1]