From: Dan K. <da...@ch...> - 2003-03-29 00:38:19
|
Re errno, I've never been able to access it either, so I don't know. I can shed a small amount of light on the opendir()-related problems, though. The clisp ffi has an undocumented mechanism, "vector", for dealing with opaque structs. Here's what the definition of DIR was the last time I looked at it, in writing my FFI patch: (def-c-type DIR (c-struct vector ; components unknown ) ) In the CVS head, the definition is: (def-c-struct (DIR :typedef)) "vector" was a horrible hack; there's a field "constructor" in the internal representation of a struct type (that's of the type, not of the struct itself), which defaults to #'list, but if the name of the struct is "vector", the constructor field is #'vector. The reason I didn't change DIR to use :typedef in my patch is that to do so, I would have had to remove the vector qualification, and I figured that it was too big a problem to solve in the same patch with the other, more pressing issues. I'm not sure specifically what causes the code to freeze when DIR is accessed without the vector qualificaton, but I can tell you the underlying cause: without the vector qualification, it's treated as an ordinary struct - not an opaque one - which happens to have zero fields. The easiest way to solve this is to add a new option :opaque, similar to :typedef, but controlling the constructor slot: #'list if it's not given, or #'vector if it is. I believe that can be done without any changes to foreign.d, only foreign.lisp. | Dan Knapp, Knight of the Random Seed | http://brain.mics.net/~dankna/ | ONES WHO DOES NOT HAVE TRIFORCE CAN'T GO IN. |