On 2/16/11, Mark Evenson evenson@panix.com wrote:
On 2/15/11 10:37 PM, Theam Yong Chew wrote:
Dear ABCL developers,
While ABCL can handle spaces (& others) in file pathnames just fine, a space in jar file pathnames still doesn't work. I have confirmed this on Linux, Mac and Windows. An example using Cygwin,
[…]
When a Pathname starts using URI scheme identifiers like 'jar', the strings are then required to obey URI encoding rules. So try replacing #\Space characters with the string "%20".
#<THREAD "interpreter" {9AC0F5}>: Debugger invoked on condition of
type FILE-ERROR Failed to create URI from 'e:/My Dropbox/temp/a space/hello.jar': Illegal character in opaque part at index 10: file:e:/My Dropbox/temp/a space/hello.jar Restarts: 0: TOP-LEVEL Return to top level.
[…]
Sorry Mark, I was going to add some more clarification to my original email, but you were too quick to reply! The above error message was actually slightly different from how I originally stumbled on the problem, which looked somewhat like this:
[1] CL-USER(1): (load "jar:file:/home/tyc20/Dropbox/temp/a%20space/hello.jar!/hello.abcl") #<THREAD "interpreter" {12C9557}>: Debugger invoked on condition of type FILE-ERROR Loadable FASL not found for 'jar:file:/home/tyc20/Dropbox/temp/a%20space/hello.jar!/hello.abcl' in 'jar:jar:file:/home/tyc20/Dropbox/temp/a%2520space/hello.jar!/hello.abcl!/hello._' Restarts: 0: ABORT Return to debug level 1.
In fact, originally, I encountered this from the command line like so:
java -cp abcl.jar:.... org.armedbear.lisp.Main --load 'jar:file:main.jar!/main.abcl'
So there weren't even any obvious spaces, since I only provided relative paths.
So to clarify, it wasn't a "Failed to create URI" error, but a "Loadable FASL not found" error.
Try with the URI escaped version, i.e. "jar:file:e/My%20Dropbox/temp/a%20spac/hello.jar!/hello.abcl", instead.
Yes, the original error message I had showed just such an escape sequence, but I wasn't sure what to make of it! For simple folks like me, if we load "/home/..." as a file, it's not a URL (and does not require escaping), whereas the jar: path uses URL 'encoding'. Would that be right? (Simplifying of course)
A quick glance through the [ABCL JAR-PATHNAME specification][1] shows that it doesn't explicity mention this design. Implicitly, since a JAR-PATHNAME is a URI-PATHNAME it has to obey the [URI-PATHNAME rules][2], but we could certainly make things clearer.
We tried to make the Lisp reader friendly is this regard by DWIMing a String inputs into Pathname, but if you find an unambiguous case that could be improved to be friendly, we would solicit a specification or patches.
Not sure what you mean here, but just being aware of the difference between jar and normal file-paths (vis a vis URL vs "plain strings") would be more than sufficient I feel. I vaguely knew about the URL stuff, but must have discounted it due to heavy use of the normal pathname form in ABCL.
Thanks, and sorry for the confusion. I hope this error is clear enough this time, and is reproducible.
Yong.
Enjoy the bear!
Yes, very much so!