Re: Regression in pathname between version 2.6.14 to 2.7.1

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

On 2/19/26 9:19 AM, Camm Maguire wrote:

> Greetings, and thanks for the note!
>
> Actually, I thought this was more of a feature rather than a bug.
> Pathname namestrings of the form "...//..." are inherently ambiguous
> (e.g. ...//.. means ..././... in Linux et.al., but means / in emacs) and
> are almost always the result of a lazy concatenation of paths, typically
> avoiding merge-pathnames which should always give the right answer:
>
>> (merge-pathnames  "../bar/baz" "etc/foo/")
>> #P"etc/foo/../bar/baz"
> That said I have a patch now testing which collapses // to /.

Thanks! I think it makes gcl more consistent with what other lisps do 
with paths like this.

&#8203;
--------------UFE7rqkyXCfup09r8h6yS60m
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;">On 2/19/26 9:1=
9
        AM, Camm Maguire wrote:<br>
      </p>
      <blockquote type=3D"cite"
style=3D"border-block-color: rgb(119, 119, 119); border-bottom-color: rgb=
(119, 119, 119); border-inline-color: rgb(114, 159, 207) rgb(119, 119, 11=
9); border-inline-start: 2px solid rgb(114, 159, 207); border-left: 2px s=
olid rgb(114, 159, 207); border-right-color: rgb(119, 119, 119); border-t=
op-color: rgb(119, 119, 119); color: rgb(119, 119, 119); column-rule-colo=
r: rgb(119, 119, 119); margin: 19.2px 0px; outline-color: rgb(119, 119, 1=
19); padding-inline: 16px; padding-left: 16px; padding-right: 16px; quote=
s: none; text-decoration-color: rgb(119, 119, 119); text-emphasis-color: =
rgb(119, 119, 119);">
        <pre wrap=3D"" class=3D"moz-quote-pre">Greetings, and thanks for =
the note!

Actually, I thought this was more of a feature rather than a bug.
Pathname namestrings of the form "...//..." are inherently ambiguous
(e.g. ...//.. means ..././... in Linux et.al., but means / in emacs) and
are almost always the result of a lazy concatenation of paths, typically
avoiding merge-pathnames which should always give the right answer:

</pre>
        <blockquote type=3D"cite">
          <pre wrap=3D"" class=3D"moz-quote-pre">(merge-pathnames  "../ba=
r/baz" "etc/foo/")
</pre>
        </blockquote>
        <blockquote type=3D"cite">
          <pre wrap=3D"" class=3D"moz-quote-pre">#P"etc/foo/../bar/baz"
</pre>
        </blockquote>
        <pre wrap=3D"" class=3D"moz-quote-pre">That said I have a patch n=
ow testing which collapses // to /.</pre>
      </blockquote>
      <p style=3D"margin-bottom: 19.2px; margin-top: 0px;">Thanks! I thin=
k
        it makes gcl more consistent with what other lisps do with paths
        like this.</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+PGJyPjwvcD48ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPk9uIDIv=
MTkvMjYgOToxOSBBTSwgQ2FtbSBNYWd1aXJlIHdyb3RlOjxicj48L2Rpdj48YmxvY2txdW90Z=
SB0eXBlPSJjaXRlIiBjaXRlPSJtaWQ6ODdtczE0ZDUybS5mc2ZAZ2xvcnkubWFndWlyZWZhbW=
lseS5vcmciPjxwcmUgd3JhcD0iIiBjbGFzcz0ibW96LXF1b3RlLXByZSI+R3JlZXRpbmdzLCB=
hbmQgdGhhbmtzIGZvciB0aGUgbm90ZSEKCkFjdHVhbGx5LCBJIHRob3VnaHQgdGhpcyB3YXMg=
bW9yZSBvZiBhIGZlYXR1cmUgcmF0aGVyIHRoYW4gYSBidWcuClBhdGhuYW1lIG5hbWVzdHJpb=
mdzIG9mIHRoZSBmb3JtICIuLi4vLy4uLiIgYXJlIGluaGVyZW50bHkgYW1iaWd1b3VzCihlLm=
cuIC4uLi8vLi4gbWVhbnMgLi4uLy4vLi4uIGluIExpbnV4IGV0LmFsLiwgYnV0IG1lYW5zIC8=
gaW4gZW1hY3MpIGFuZAphcmUgYWxtb3N0IGFsd2F5cyB0aGUgcmVzdWx0IG9mIGEgbGF6eSBj=
b25jYXRlbmF0aW9uIG9mIHBhdGhzLCB0eXBpY2FsbHkKYXZvaWRpbmcgbWVyZ2UtcGF0aG5hb=
WVzIHdoaWNoIHNob3VsZCBhbHdheXMgZ2l2ZSB0aGUgcmlnaHQgYW5zd2VyOgoKPC9wcmU+PG=
Jsb2NrcXVvdGUgdHlwZT0iY2l0ZSI+PHByZSB3cmFwPSIiIGNsYXNzPSJtb3otcXVvdGUtcHJ=
lIj4obWVyZ2UtcGF0aG5hbWVzICAiLi4vYmFyL2JheiIgImV0Yy9mb28vIikKPC9wcmU+PC9i=
bG9ja3F1b3RlPjxwcmUgd3JhcD0iIiBjbGFzcz0ibW96LXF1b3RlLXByZSI+PC9wcmU+PGJsb=
2NrcXVvdGUgdHlwZT0iY2l0ZSI+PHByZSB3cmFwPSIiIGNsYXNzPSJtb3otcXVvdGUtcHJlIj=
4jUCJldGMvZm9vLy4uL2Jhci9iYXoiCjwvcHJlPjwvYmxvY2txdW90ZT48cHJlIHdyYXA9IiI=
gY2xhc3M9Im1vei1xdW90ZS1wcmUiPlRoYXQgc2FpZCBJIGhhdmUgYSBwYXRjaCBub3cgdGVz=
dGluZyB3aGljaCBjb2xsYXBzZXMgLy8gdG8gLy48L3ByZT48L2Jsb2NrcXVvdGU+PHA+VGhhb=
mtzISZuYnNwOyBJIHRoaW5rIGl0IG1ha2VzIGdjbCBtb3JlIGNvbnNpc3RlbnQgd2l0aCB3aG=
F0IG90aGVyIGxpc3BzIGRvIHdpdGggcGF0aHMgbGlrZSB0aGlzLiZuYnNwOyZuYnNwOzwvcD4=
8cD48YnI+PC9wPjx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSB0ZXh0Y29tcGxldGUtZHJvcGRv=
d24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyBwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6I=
DEwMDA7IiBjb250ZW50ZWRpdGFibGU9ImZhbHNlIiBwb3BvdmVyPSJhdXRvIj48L3VsPg=3D=3D=
">&amp;#8203;</div>
  </body>
</html>

--------------UFE7rqkyXCfup09r8h6yS60m--