[Openmcl-devel] Question about foreign-functions

Camille Troillard tuscland at mac.com
Thu Nov 20 16:16:12 PST 2003

Hello OpenMCL,

I am Camille, and I am new to this list.
I am building a web server application with PortableAllegroServe with 
webaction and CL-SQL with OpenMCL on Mac OS X 10.3.

I am getting some problems with FFI :  Here is a code sample that 
doesn't work.  It is very likely that I am wrong, because I just start 
writing Lisp programs.

This function is supposed to call the function "stat", access the 
st_ino field of the structure  and return the result which is 
(supposedly) an int.

(defun filesys-inode (path)
   (let ((checked-path (probe-file path)))
     (cond (checked-path
	   (rlet ((pstat (:* (:struct stat))))
		 (with-cstrs ((str (namestring checked-path)))
		   (#_stat str pstat))
		 (pref pstat :stat.st_ino)))
	  (t (error "path ~s does not exist" path)))))

If I call this function I get this error :

 > Error in process listener(1): value 0 is not of the expected type 
 > While executing: "Unknown"

If I put a "print" form around the pref call, the result I correctly 
printed on the standard output and then the error arises.  A look to 
the backtrace confirms that the error occurs outside of the 
"filesys-inode" call.

If I replace rlet with rletz I get the following compilation error 
which I don't understand:

 > Error in process listener(1): While compiling FILESYS-INODE :
 >                               #1=(PSTAT (:* (:STRUCT STAT))) is not a 
symbol or lambda expression in the form (#1#) .

I think that I must pass #_stat a reference to a stack allocated 
The problem is that:
1.  I don't know how to pass a reference to a stack allocated object to 
2.  I don't know how to declare a stat structure object because if I 
try :

	(rlet ((pstat (:struct stat)))

I get a compilation error.

Thanks in advance for any help!

Kind Regards,
Camille Troillard

More information about the Openmcl-devel mailing list