X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fstrings.lisp;h=6e7292cff8e8e89ea4f3a2f4b0a2dc8fb91fe996;hb=6f682746787779a2475eec53d7d46efab891b392;hp=4671925661c8b67298d5879a233524e08e9619f7;hpb=b3e638cc3c979d19656669edff857a7b6d2ce278;p=uffi.git diff --git a/src/strings.lisp b/src/strings.lisp index 4671925..6e7292c 100644 --- a/src/strings.lisp +++ b/src/strings.lisp @@ -193,20 +193,26 @@ that LW/CMU automatically converts strings from c-calls." (defmacro allocate-foreign-string (size &key (unsigned t)) - #+(or cmu scl) + #+ignore (let ((array-def (gensym))) `(let ((,array-def (list 'alien:array 'c-call:char ,size))) (eval `(alien:cast (alien:make-alien ,,array-def) ,(if ,unsigned '(* (alien:unsigned 8)) '(* (alien:signed 8))))))) + + #+(or cmu scl) + `(alien:make-alien ,(if unsigned + '(alien:unsigned 8) + '(alien:signed 8)) + ,size) + #+sbcl - (let ((array-def (gensym))) - `(let ((,array-def (list 'sb-alien:array 'char ,size))) - (eval `(sb-alien:cast (sb-alien:make-alien ,,array-def) - ,(if ,unsigned - '(* (sb-alien:unsigned 8)) - '(* (sb-alien:signed 8))))))) + `(sb-alien:make-alien ,(if unsigned + '(sb-alien:unsigned 8) + '(sb-alien:signed 8)) + ,size) + #+lispworks `(fli:allocate-foreign-object :type ,(if unsigned @@ -227,7 +233,7 @@ that LW/CMU automatically converts strings from c-calls." #+allegro `(ff:foreign-strlen ,foreign-string) #-allegro `(loop with size = 0 - until (char= (deref-array ,ptr '(:array :unsigned-char) size) #\Null) + until (char= (deref-array ,foreign-string '(:array :unsigned-char) size) #\Null) do (incf size) finally return size))