I didn't realize that "isSystemDirectory" checks for prefix.
Well, it also needs to check for string length, otherwise it
will mistakenly accept shorter paths.

The following patch passes CI test now.

Please commit it if it looks good to you as well.

- Qian

diff --git a/src/interp/lisplib.boot b/src/interp/lisplib.boot
index 9c37eacc..b11d9603 100644
--- a/src/interp/lisplib.boot
+++ b/src/interp/lisplib.boot
@@ -71,7 +71,7 @@ loadLibIfNotLoaded libName ==
 loadLib cname ==
   startTimingProcess 'load
   fullLibName := get_database(cname, 'OBJECT) or return nil
-  systemdir? := isSystemDirectory(pathnameDirectory fullLibName)
+  systemdir? := isSystemDirectory(fullLibName)
   update? := not systemdir?
   loadLibNoUpdate1(cname, fullLibName)
   kind := get_database(cname, 'CONSTRUCTORKIND)
diff --git a/src/interp/pathname.boot b/src/interp/pathname.boot
index 7bd1f1b3..c350733f 100644
--- a/src/interp/pathname.boot
+++ b/src/interp/pathname.boot
@@ -61,4 +61,6 @@ isExistingFile f ==

 --% Scratchpad II File Name Functions

-isSystemDirectory dir == EVERY(function CHAR_=,$spadroot,dir)
+isSystemDirectory path ==
+  -- check if $spadroot is the prefix of 'path'
+  # path >= # $spadroot and EVERY(function CHAR_=, $spadroot, path)


On 5/14/24 01:40, Waldek Hebisch wrote:
On Mon, May 13, 2024 at 08:52:12PM +0800, Qian Yun wrote:
The following patch works.

Do we need to compare PATHNAME_-DEVICE as well
(returns "C" in this case) in 'isSystemDirectory'?

I would prefer different approach.  I mean, the patch may be correct
solution to problem "Do two Windows paths point to the same file?"
(for such problem you probably want to include PATHNAME_-DEVICE).
What I do not like is fact that this would propagate Windows
weirdness deper into FriCAS code.

Pathname here comes from 'get_database' and in 'get_database' be
have

     if key = 'OBJECT then
         if CONSP(data) then
             data := first(data)
         if NULL(PATHNAME_-DIRECTORY(data)) then
             data := STRCONC($spadroot, '"/algebra/", data,
                            '".", $lisp_bin_filetype)
     data

So, returned patname has '$spadroot' as a prefix and AFAICS all we need
is to avoid mangling the pathname.  Maybe just remove 'pathnameDirectory'
call (that is use first part of the patch without the second  part).

--
You received this message because you are subscribed to the Google Groups "FriCAS - 
computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to fricas-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/fricas-devel/8d78f114-eab8-4688-837d-b2306b9b50de%40gmail.com.

Reply via email to