Regression in pathname between version 2.6.14 to 2.7.1

Raymond Toy <[email protected]> Wed, 18 Feb 2026 19:05:28 -0800
Newsgroups gmane.lisp.gcl.devel
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------7E14vMllQWq8grfcjks0rYQO
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

This came up on the Maxima list. Consider

|(let ((file (pathname "//tmp/.////test.txt"))) (with-open-file (stream 
file :direction :output :if-exists :supersede) (values file (truename 
file) (pathname stream)))) |

gcl 2.6.14 returns:

|#p"/tmp/test.txt" #p"/tmp/test.txt" #p"/tmp/test.txt" |

Losing the "/./" is unfortunate, but not really incorrect on Unix.

However, with gcl 2.7.1 we get:

|Error: Fast links are on: do (si::use-fast-links nil) for debugging 
Signalled by PATHNAME. Condition in PATHNAME [or a callee]: 
INTERNAL-SIMPLE-PARSE-ERROR: "//tmp/.////test.txt" is not a valid 
pathname on host NIL Broken at PATHNAME. Type :H for Help. 1 Return to 
top level. >> |

This version basically dislikes having consecutive slashes. On unix, 
this is equivalent to just one "/".

If you change the namestring to "/tmp/./test.txt", gcl 2.7.1 works and 
preserves the "/./".

It would be really nice to get this fixed before 2.7.2 is released.

&#8203;
--------------7E14vMllQWq8grfcjks0rYQO
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html>
<html>
  <head>

    <meta http-equiv=3D"content-type" content=3D"text/html; charset=3DUTF=
-8">
    <title></title>
    <meta charset=3D"utf-8">
  </head>
  <body>
    <div class=3D"markdown-here-wrapper">
      <p style=3D"margin-bottom: 19.2px; margin-top: 0px;">This came up o=
n
        the Maxima list. Consider</p>
      <pre
style=3D"font-family: Consolas, Inconsolata, Courier, monospace; font-siz=
e: 16px; line-height: 19.2px; margin-bottom: 19.2px; margin-top: 19.2px;"=
><code
style=3D"background-color: rgba(175, 184, 193, 0.2); border-block: 1px so=
lid rgb(204, 204, 204); border-bottom: 1px solid rgb(204, 204, 204); bord=
er-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-end-e=
nd-radius: 3px; border-end-start-radius: 3px; border-inline: 1px solid rg=
b(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right=
: 1px solid rgb(204, 204, 204); border-start-end-radius: 3px; border-star=
t-start-radius: 3px; border-top: 1px solid rgb(204, 204, 204); border-top=
-left-radius: 3px; border-top-right-radius: 3px; display: block; font-fam=
ily: Consolas, Inconsolata, Courier, monospace; font-size: 16px; font-wei=
ght: 550; line-height: 19.2px; margin-left: 2.4px; margin-right: 2.4px; o=
verflow-block: auto; overflow-inline: auto; overflow: auto; padding-block=
: 8px; padding-bottom: 8px; padding-inline: 11.2px; padding-left: 11.2px;=
 padding-right: 11.2px; padding-top: 8px;">
(let ((file (pathname "//tmp/.////test.txt")))
  (with-open-file (stream file :direction :output :if-exists :supersede)
    (values file (truename file)
            (pathname stream))))
</code></pre>
      <p style=3D"margin-bottom: 19.2px; margin-top: 0px;">gcl 2.6.14
        returns:</p>
      <pre
style=3D"font-family: Consolas, Inconsolata, Courier, monospace; font-siz=
e: 16px; line-height: 19.2px; margin-bottom: 19.2px; margin-top: 19.2px;"=
><code
style=3D"background-color: rgba(175, 184, 193, 0.2); border-block: 1px so=
lid rgb(204, 204, 204); border-bottom: 1px solid rgb(204, 204, 204); bord=
er-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-end-e=
nd-radius: 3px; border-end-start-radius: 3px; border-inline: 1px solid rg=
b(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right=
: 1px solid rgb(204, 204, 204); border-start-end-radius: 3px; border-star=
t-start-radius: 3px; border-top: 1px solid rgb(204, 204, 204); border-top=
-left-radius: 3px; border-top-right-radius: 3px; display: block; font-fam=
ily: Consolas, Inconsolata, Courier, monospace; font-size: 16px; font-wei=
ght: 550; line-height: 19.2px; margin-left: 2.4px; margin-right: 2.4px; o=
verflow-block: auto; overflow-inline: auto; overflow: auto; padding-block=
: 8px; padding-bottom: 8px; padding-inline: 11.2px; padding-left: 11.2px;=
 padding-right: 11.2px; padding-top: 8px;">
#p"/tmp/test.txt"
#p"/tmp/test.txt"
#p"/tmp/test.txt"
</code></pre>
      <p style=3D"margin-bottom: 19.2px; margin-top: 0px;">Losing the
        "/./" is unfortunate, but not really incorrect on Unix.</p>
      <p style=3D"margin-bottom: 19.2px; margin-top: 0px;">However, with
        gcl 2.7.1 we get:</p>
      <pre
style=3D"font-family: Consolas, Inconsolata, Courier, monospace; font-siz=
e: 16px; line-height: 19.2px; margin-bottom: 19.2px; margin-top: 19.2px;"=
><code
style=3D"background-color: rgba(175, 184, 193, 0.2); border-block: 1px so=
lid rgb(204, 204, 204); border-bottom: 1px solid rgb(204, 204, 204); bord=
er-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-end-e=
nd-radius: 3px; border-end-start-radius: 3px; border-inline: 1px solid rg=
b(204, 204, 204); border-left: 1px solid rgb(204, 204, 204); border-right=
: 1px solid rgb(204, 204, 204); border-start-end-radius: 3px; border-star=
t-start-radius: 3px; border-top: 1px solid rgb(204, 204, 204); border-top=
-left-radius: 3px; border-top-right-radius: 3px; display: block; font-fam=
ily: Consolas, Inconsolata, Courier, monospace; font-size: 16px; font-wei=
ght: 550; line-height: 19.2px; margin-left: 2.4px; margin-right: 2.4px; o=
verflow-block: auto; overflow-inline: auto; overflow: auto; padding-block=
: 8px; padding-bottom: 8px; padding-inline: 11.2px; padding-left: 11.2px;=
 padding-right: 11.2px; padding-top: 8px;">
Error:
Fast links are on: do (si::use-fast-links nil) for debugging
Signalled by PATHNAME.

Condition in PATHNAME [or a callee]: INTERNAL-SIMPLE-PARSE-ERROR: "//tmp/=
=2E////test.txt" is not a valid pathname on host NIL

Broken at PATHNAME.  Type :H for Help.
    1  Return to top level.=20
&gt;&gt;
</code></pre>
      <p style=3D"margin-bottom: 19.2px; margin-top: 0px;">This version
        basically dislikes having consecutive slashes. On unix, this is
        equivalent to just one "/".</p>
      <p style=3D"margin-bottom: 19.2px; margin-top: 0px;">If you change
        the namestring to "/tmp/./test.txt", gcl 2.7.1 works and
        preserves the "/./".</p>
      <p style=3D"margin-bottom: 19.2px; margin-top: 0px;">It would be
        really nice to get this fixed before 2.7.2 is released.</p>
    </div>
    <div class=3D"mdhr-raw"
style=3D"height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-s=
ize:0;padding:0;margin:0;"
      aria-hidden=3D"true"
title=3D"MDH:PHA+VGhpcyBjYW1lIHVwIG9uIHRoZSBNYXhpbWEgbGlzdC4mbmJzcDsgQ29u=
c2lkZXI8L3A+PHA+YGBgPC9wPjxwPihsZXQgKChmaWxlIChwYXRobmFtZSAiLy90bXAvLi8vL=
y90ZXN0LnR4dCIpKSk8YnI+Jm5ic3A7ICh3aXRoLW9wZW4tZmlsZSAoc3RyZWFtIGZpbGUgOm=
RpcmVjdGlvbiA6b3V0cHV0IDppZi1leGlzdHMgOnN1cGVyc2VkZSk8YnI+Jm5ic3A7ICZuYnN=
wOyAodmFsdWVzIGZpbGUgKHRydWVuYW1lIGZpbGUpPGJyPiZuYnNwOyAmbmJzcDsgJm5ic3A7=
ICZuYnNwOyAmbmJzcDsgJm5ic3A7IChwYXRobmFtZSBzdHJlYW0pKSkpPC9wPjxwPmBgYDwvc=
D48cD5nY2wgMi42LjE0IHJldHVybnM6PC9wPjxwPmBgYDwvcD48cD4jcCIvdG1wL3Rlc3QudH=
h0Ijxicj4jcCIvdG1wL3Rlc3QudHh0Ijxicj4jcCIvdG1wL3Rlc3QudHh0Ijxicj5gYGA8L3A=
+PHA+TG9zaW5nIHRoZSAiLy4vIiBpcyB1bmZvcnR1bmF0ZSwgYnV0IG5vdCByZWFsbHkgaW5j=
b3JyZWN0IG9uIFVuaXguPC9wPjxwPkhvd2V2ZXIsIHdpdGggZ2NsIDIuNy4xIHdlIGdldDo8L=
3A+PHA+YGBgPC9wPjxwPkVycm9yOjxicj5GYXN0IGxpbmtzIGFyZSBvbjogZG8gKHNpOjp1c2=
UtZmFzdC1saW5rcyBuaWwpIGZvciBkZWJ1Z2dpbmc8YnI+U2lnbmFsbGVkIGJ5IFBBVEhOQU1=
FLjxicj48YnI+Q29uZGl0aW9uIGluIFBBVEhOQU1FIFtvciBhIGNhbGxlZV06IElOVEVSTkFM=
LVNJTVBMRS1QQVJTRS1FUlJPUjogIi8vdG1wLy4vLy8vdGVzdC50eHQiIGlzIG5vdCBhIHZhb=
GlkIHBhdGhuYW1lIG9uIGhvc3QgTklMPGJyPjxicj5Ccm9rZW4gYXQgUEFUSE5BTUUuJm5ic3=
A7IFR5cGUgOkggZm9yIEhlbHAuPGJyPiZuYnNwOyAmbmJzcDsgMSZuYnNwOyBSZXR1cm4gdG8=
gdG9wIGxldmVsLiZuYnNwOzxicj4mZ3Q7Jmd0OzwvcD48cD5gYGA8L3A+PHA+VGhpcyB2ZXJz=
aW9uIGJhc2ljYWxseSBkaXNsaWtlcyBoYXZpbmcgY29uc2VjdXRpdmUgc2xhc2hlcy4mbmJzc=
DsgT24gdW5peCwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGp1c3Qgb25lICIvIi48L3A+PHA+SW=
YgeW91IGNoYW5nZSB0aGUgbmFtZXN0cmluZyB0byZuYnNwOyIvdG1wLy4vdGVzdC50eHQiLCB=
nY2wgMi43LjEgd29ya3MgYW5kIHByZXNlcnZlcyB0aGUgIi8uLyIuPC9wPjxwPkl0IHdvdWxk=
IGJlIHJlYWxseSBuaWNlIHRvIGdldCB0aGlzIGZpeGVkIGJlZm9yZSAyLjcuMiBpcyByZWxlY=
XNlZC48L3A+PHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IHRleHRjb21wbGV0ZS1kcm9wZG93bi=
Igc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDogMTA=
wMDsiIGNvbnRlbnRlZGl0YWJsZT0iZmFsc2UiIHBvcG92ZXI9ImF1dG8iPjwvdWw+">&amp;#=
8203;</div>
  </body>
</html>

--------------7E14vMllQWq8grfcjks0rYQO--