I have found small mistake in cffi-uffi-compat:
CL-USER> (cffi-uffi-compat:def-struct g-value (g-type (:array :int 16))) G-VALUE
CL-USER> (cffi-uffi-compat::convert-uffi-type 'g-value) G-VALUE
CL-USER> (cffi-uffi-compat::convert-uffi-type '(:array 'g-value)) (CFFI-UFFI-COMPAT::UFFI-ARRAY NIL NIL)
Last call was to return: (CFFI-UFFI-COMPAT::UFFI-ARRAY G-VALUE NIL)
For correct work I have corrected convert-uffi-type as follows:
(defun convert-uffi-type (uffi-type) "Convert a UFFI primitive type to a CFFI type." ;; Many CFFI types are the same as UFFI. This list handles the ;; exceptions only. (case uffi-type (:cstring :pointer) (:pointer-void :pointer) (:pointer-self :pointer) (:char '(uffi-char :char)) (:unsigned-char '(uffi-char :unsigned-char)) (:byte :char) (:unsigned-byte :unsigned-char) (t (if (listp uffi-type) (case (car uffi-type) (* :pointer) (:array `(uffi-array ,(convert-uffi-type (second uffi-type)) ,(third uffi-type))) (:union (second uffi-type)) (:struct (convert-uffi-type (second uffi-type))) (:struct-pointer :pointer)
;My correction (t (eval uffi-type)) ) uffi-type))))
I bad know lisp so probably this not best variant of the decision of this mistake.