;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Feb 2002
;;;;
-;;;; $Id: strings.cl,v 1.7 2002/03/18 22:47:57 kevin Exp $
+;;;; $Id: strings.cl,v 1.8 2002/03/19 16:42:59 kevin Exp $
;;;;
;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg
;;;;
(i (gensym)))
`(when (stringp ,obj)
(let* ((,size (length ,obj))
- (,storage (alien:make-alien char (1+ ,size))))
- (setq ,storage (alien:cast ,storage (* char)))
- (dotimes (,i ,size)
- (declare (fixnum ,i)
- (optimize (speed 3) (safety 0)))
- (setf (alien:deref ,storage ,i) (char-code (char ,obj ,i))))
- (setf (alien:deref ,storage ,size) 0)
+ (,storage (alien:make-alien (alien:unsigned 8) (1+ ,size))))
+ (setq ,storage (alien:cast ,storage (* (alien:unsigned 8))))
+ (locally
+ (declare (optimize (speed 3) (safety 0)))
+ (dotimes (,i ,size)
+ (declare (fixnum ,i))
+ (setf (alien:deref ,storage ,i) (char-code (char ,obj ,i))))
+ (setf (alien:deref ,storage ,size) 0))
,storage)))
)
-(defmacro allocate-foreign-string (size &key (unsigned
- #+cmu nil
- #+lispworks t))
+(defmacro allocate-foreign-string (size &key (unsigned t))
#+cmu
(let ((array-def (gensym)))
`(let ((,array-def (list 'alien:array 'c-call:char ,size)))