From: Kevin M. Rosenberg Date: Thu, 21 Mar 2002 05:57:03 +0000 (+0000) Subject: r1600: Fixed foreign-string on cmucl to handle null strings X-Git-Tag: v1.6.1~566 X-Git-Url: http://git.kpe.io/?a=commitdiff_plain;h=ddf36af16030d4e73202782f6811466e4b6b29a3;p=uffi.git r1600: Fixed foreign-string on cmucl to handle null strings --- 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))