Tcl Source Code

Ticket Change Details
Login
Overview

Artifact ID: 3d3271ca51422e3ce3c9d1ac47b9ff26d843b2045b58b3955e123f24cd719068
Ticket: e83a97c7fee9d6bc2bec78d70b205a0e4d09ea8d
windows: paths starting with tilde (~) are "partially" absolute
User & Date: sebres 2019-11-08 13:30:37
Changes

  1. comment changed to:
    Issue could be considered as continuation of [9e6b569963]...
    
    Note the ticket is only about <code>~*</code> and not <code>~/*</code> (which could be firstly considered as rather absolute path).
    
    Under windows it is possible to have relative paths (file and directory names) starting with tilde, as such it is "partially absolute" path, so in my opinion should be interpreted as relative if used in file join.<br/>
    From this point of view <code>file join $dirname $filename</code> behaves incorrectly under windows if <code>filename</code> starting with <code>~</code> characters:
    
    <code><pre style="padding-left:10pt">
    % file join $env(tmp) ~*
    ~*
    % file join $env(tmp) ~abc.txt
    ~abc.txt
    </pre></code>
    
    Where <code>glob</code> already has correct behavior here:
    <code><pre style="padding-left:10pt">
    % glob -directory e:/temp ~*
    e:/temp/~abc.txt
    % glob e:/temp/~*
    e:/temp/~abc.txt
    % cd e:/temp
    % glob [pwd]/~*
    E:/Temp/~abc.txt
    </pre></code>
    
    Just this one is a bit confusing (I know it is a bit "ambiguous", but...):
    <code><pre style="padding-left:10pt">
    % glob ~*
    user "*" doesn't exist
    </pre></code>
    Despite ambiguity it looks still weird to me:
    
    <ol>
    <li> either the decision remains "path of pattern is absolute", it could be fixed to list all users/homes where caller is permitted.</li>
    <li> or the decision going either to "path of pattern considered as relative" under windows, it should behave like <code>glob [pwd]/~*</code> (so find all files starting with "~" in current directory).</li>
    </ol>
    
    Anyway (after fix) it could be additionally documented (with difference between unix/windows).
    
  2. login: "sebres"
  3. mimetype: "text/plain"