Marko Tapio Manninen <[EMAIL PROTECTED]> writes: > void (*cb)(struct evbuffer *, size_t, size_t, void *);
This is explained in tutorial format in §3.9 `Calling Lisp from C' in the official manual, and reference documentation is in §11 `Callbacks'. The official manual may be found on the website, but I strongly recommend that you use the one you should have received with CFFI. > (defconstant HTTP_OK 200) > (defconstant HTTP_NOCONTENT 204) > (defconstant HTTP_MOVEPERM 301) > ... `defcenum' would be good for this. > (defcstruct evbuffer > (*buffer :unsigned-char) > (*orig_buffer :unsigned-char) > (misalign size-t) > (totallen size-t) > (off size-t) > (*cb :pointer) ; struct? > (*cbarg :pointer)) Interestingly, this arg is called "closure" in libraries that know what it hacks around. You may wish to call it that to make its nature clear to Lisp-readers. > (defcfun ("evbuffer_add_printf" %evbuffer-add-printf) :void > (buf evbuffer) > (msg :string) > (uri :string)) I believe this was mentioned on #lisp, but those should not be indented a full tab-stop. The communities of Lisp indenters are not nearly as divergent as with some languages, and I don't think you'll find one that would encourage that. > (defcfun ("evhttp_send_reply" %evhttp-send-reply) :void > (req evhttp-request) > (flag :int) > (msg :string) > (buf evbuffer)) > > ;;; unwind-protect to create evbuffer-new? Yes, but it's for freeing, not allocating. See §3.8 `Memory management' for some tips. > (defun generic-handler (req &optional (arg nil)) > (let ((buf (%evbuffer-new))) > (if (null buf) > (error "Failed to create response buffer") Unfortunately, you can't signal ERROR here after you convert it to a real callback; see the aforementioned §3.9 for why. For generalized conditions, think of this as a game of volleyball, where the call to whatever C function calls GENERIC-HANDLER is the net. -- But you know how reluctant paranormal phenomena are to reveal themselves when skeptics are present. --Robert Sheaffer, SkI 9/2003 _______________________________________________ cffi-devel mailing list cffi-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel