(string
(locally
(declare (optimize (speed 3) (safety 0)))
- (let* ((fe (or encoding *default-foreign-encoding*))
+ (let* ((fe (or encoding *default-foreign-encoding*
+ sb-impl::*default-external-format*))
(ife (when fe (lookup-foreign-encoding fe))))
(if ife
(let* ((octets (sb-ext:string-to-octets str :external-format ife))
(setq storage (sb-alien:cast storage (* (sb-alien:unsigned 8))))
(dotimes (i size)
(declare (fixnum i))
- (setf (sb-alien:deref storage i) (svref octets i)))
+ (setf (sb-alien:deref storage i) (aref octets i)))
;; terminate with 2 nulls, maybe needed for some encodings
(setf (sb-alien:deref storage size) 0)
(setf (sb-alien:deref storage (1+ size)) 0)
`(new-ptr ,size)
)
-(defun foreign-string-length (foreign-string)
+(defmacro foreign-string-length (foreign-string)
#+allegro `(ff:foreign-strlen ,foreign-string)
#-allegro
- `(loop with size = 0
- until (char= (deref-array ,foreign-string '(:array :unsigned-char) size) #\Null)
- do (incf size)
- finally return size))
+ `(loop
+ for size from 0
+ until (char= (deref-array ,foreign-string '(:array :unsigned-char) size) #\Null)
+ finally (return size)))
(defmacro with-foreign-string ((foreign-string lisp-string &optional encoding)