X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fstrings.cl;h=e6abd8045490ab08383874e8a3b0685dc6972dc0;hb=7fcec7e8319f5b11c8f501b6a869142cd26a8bdd;hp=0bb574252f32a89a7efa5fac694e33bc5e853a48;hpb=cb657edcb17cc3c4a6e1c35b7ce33aaf9db48903;p=uffi.git diff --git a/src/strings.cl b/src/strings.cl index 0bb5742..e6abd80 100644 --- a/src/strings.cl +++ b/src/strings.cl @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Feb 2002 ;;;; -;;;; $Id: strings.cl,v 1.9 2002/03/21 04:05:15 kevin Exp $ +;;;; $Id: strings.cl,v 1.10 2002/03/21 05:57:03 kevin Exp $ ;;;; ;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -87,9 +87,11 @@ that CMU automatically converts strings from c-calls." :null-terminated-p ,null-terminated-p :external-format '(:latin-1 :eol-style :lf))) #+cmu - `(cmucl-naturalize-cstring (alien:alien-sap ,obj) - :length ,length - :null-terminated-p ,null-terminated-p) + `(if (null-pointer-p ,obj) + nil + (cmucl-naturalize-cstring (alien:alien-sap ,obj) + :length ,length + :null-terminated-p ,null-terminated-p)) ) (defmacro convert-to-foreign-string (obj) @@ -105,7 +107,10 @@ that CMU automatically converts strings from c-calls." (let ((size (gensym)) (storage (gensym)) (i (gensym))) - `(when (stringp ,obj) + `(etypecase ,obj + (null + (alien:sap-alien (system:int-sap 0) (* (alien:unsigned 8)))) + (string (let* ((,size (length ,obj)) (,storage (alien:make-alien (alien:unsigned 8) (1+ ,size)))) (setq ,storage (alien:cast ,storage (* (alien:unsigned 8)))) @@ -115,8 +120,8 @@ that CMU automatically converts strings from c-calls." (declare (fixnum ,i)) (setf (alien:deref ,storage ,i) (char-code (char ,obj ,i)))) (setf (alien:deref ,storage ,size) 0)) - ,storage))) - ) + ,storage)))) + ) (defmacro allocate-foreign-string (size &key (unsigned t))