[cffi-devel] Possible bug reading *FOREIGN-LIBRARY-DIRECTORIES* on Windows 7

Hans Hübner hans.huebner at gmail.com
Fri Nov 9 10:14:49 UTC 2012


Ralph,

what you observe is not a bug in CFFI, but a feature of the Common Lisp
pathname system.   The *FOREIGN-LIBRARY-DIRECTORIES* contains a list of
pathname designators. When a string is used as a pathname designator
(either by putting a string onto that list or by using the #P reader macro
to parse it into a pathname object), the last component of the string is
considered to be a file name, not a directory component.  It is possible to
specify an empty file name in a string used as pathname, though.

To wit:

CL-USER> (describe #P"foo")
#P"foo"
Type: PATHNAME
Class: #<BUILT-IN-CLASS PATHNAME>
TYPE: (PATHNAME . #<CCL::CLASS-WRAPPER PATHNAME #x300040039D2D>)
%PATHNAME-DIRECTORY: NIL
%PATHNAME-NAME: "foo"
%PATHNAME-TYPE: NIL
[...]
CL-USER> (describe #P"foo/")
#P"foo/"
Type: PATHNAME
Class: #<BUILT-IN-CLASS PATHNAME>
TYPE: (PATHNAME . #<CCL::CLASS-WRAPPER PATHNAME #x300040039D2D>)
%PATHNAME-DIRECTORY: (:RELATIVE "foo")
%PATHNAME-NAME: NIL
%PATHNAME-TYPE: NIL
[...]

The CL-FAD library is useful if you need to deal with directory
specifications that do not conform to CL's pathname string parsing rules:

CL-USER> (describe (cl-fad:pathname-as-directory #P"foo"))
#P"foo/"
Type: PATHNAME
Class: #<BUILT-IN-CLASS PATHNAME>
TYPE: (PATHNAME . #<CCL::CLASS-WRAPPER PATHNAME #x300040039D2D>)
%PATHNAME-DIRECTORY: (:RELATIVE "foo")
%PATHNAME-NAME: NIL
%PATHNAME-TYPE: NIL
[...]

-Hans


On Fri, Nov 9, 2012 at 4:40 AM, Ralph Möritz <ralph.moeritz at outlook.com>wrote:

> I've observed what appears to be a bug on Windows using CCL 1.8 & the
> latest CFFI version from Quicklisp (0.10.7.1).
>
> It seems *FOREIGN-LIBRARY-DIRECTORIES* is not being read
> correctly. I've placed `sqlite3.dll` in
> `C:\users\ralphm\temp\lib`. Below are the results of evaluating
> `(cffi:load-foreign-library '(:default "sqlite3"))` for different
> values of *FOREIGN-LIBRARY-DIRECTORIES*. It appears the trailing `/`
> is required but I haven't seen this documented in the manual - is this
> intended behaviour?
>
> '("c:/users/ralphm/temp/lib/")
> ==> #<FOREIGN-LIBRARY DEFAULT-3009 "sqlite3.dll">
>
> '(#p"c:/users/ralphm/temp/lib/")
> ==> #<FOREIGN-LIBRARY DEFAULT-3009 "sqlite3.dll">
>
> '("c:/users/ralphm/temp/lib")
> ==> Unable to load foreign library (DEFAULT-3009).
>     Error opening shared library sqlite3.dll : The specified module
>     could not be found. .
>
> '(#p"c:/users/ralphm/temp/lib")
> ==> Unable to load foreign library (DEFAULT-3009).
>     Error opening shared library sqlite3.dll : The specified module
>     could not be found. .
>
> Cheers,
> Ralph
> _______________________________________________
> cffi-devel mailing list
> cffi-devel at common-lisp.net
> http://lists.common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cffi-devel/attachments/20121109/88940c76/attachment.html>


More information about the cffi-devel mailing list