Index: /trunk/source/lib/db-io.lisp
===================================================================
--- /trunk/source/lib/db-io.lisp	(revision 14434)
+++ /trunk/source/lib/db-io.lisp	(revision 14435)
@@ -1322,7 +1322,9 @@
            (:signed `(,encoded-type-signed-32))
            (:unsigned `(,encoded-type-unsigned-32))
-           ((:long-double :complex-int
-                        :complex-float :complex-double :complex-long-double)
-            (encode-ffi-type `(:struct ,primtype))))
+           ((:long-float :long-double) (encode-ffi-type '(:array 2 (:primitive :double))))
+           (:complex-int (encode-ffi-type '(:array 2 (:primitive :signed))))
+           (:complex-float (encode-ffi-type '(:array 2 (:primitive :float))))
+           (:complex-double (encode-ffi-type '(:array 2 (:primitive :double))))
+           (:complex-long-double (encode-ffi-type '(:array 4 (:primitive :double)))))
          (ecase (car primtype)
            (* `(,encoded-type-pointer ,@(encode-ffi-type
@@ -1396,5 +1398,5 @@
            (:unsigned `(f))
            ((:long-double :complex-int
-			  :complex-float :complex-double :complex-long-double)            
+			  :complex-float :complex-double :complex-long-double)
             #|(encode-ffi-arg-type `(:struct ,primtype))|#
             `(#\?)))
@@ -1428,5 +1430,8 @@
           (:union #\u)
           (:transparent-union #\U))
-           ,@(encode-name (ffi-struct-reference (cadr spec)))))
+           ,@(encode-name
+              (if (eq (car spec) :struct)
+                (ffi-struct-reference (cadr spec))
+                (ffi-union-reference (cadr spec))))))
     (:typedef
      `(#\t ,@(encode-name (ffi-typedef-name (cadr spec)))))
