-;;;; This file contains some extensions to the Alien facility to
-;;;; simplify importing C interfaces.
+;;;; FIXME: This file and host-c-call.lisp are separate from the
+;;;; rest of the alien source code for historical reasons: CMU CL
+;;;; made a distinction between the stuff in the C-CALL package and
+;;;; stuff in the ALIEN package. There's no obvious boundary
+;;;; there, though, and SBCL doesn't try to make this distinction,
+;;;; so it might make sense to just merge these files in with the
+;;;; rest of the SB-ALIEN code.
;;;; This software is part of the SBCL system. See the README file for
;;;; more information.
;;;; provided with absolutely no warranty. See the COPYING and CREDITS
;;;; files for more information.
-(in-package "SB!C-CALL")
+(in-package "SB!ALIEN")
\f
;;;; extra types
\f
(defun %naturalize-c-string (sap)
(declare (type system-area-pointer sap))
- (with-alien ((ptr (* char) sap))
- (locally
- (declare (optimize (speed 3) (safety 0)))
- (let ((length (loop
- for offset of-type fixnum upfrom 0
- until (zerop (deref ptr offset))
- finally (return offset))))
- (let ((result (make-string length)))
- (sb!kernel:copy-from-system-area (alien-sap ptr) 0
- result (* sb!vm:vector-data-offset
- sb!vm:n-word-bits)
- (* length sb!vm:n-byte-bits))
- result)))))
+ (locally
+ (declare (optimize (speed 3) (safety 0)))
+ (let ((length (loop for offset of-type fixnum upfrom 0
+ until (zerop (sap-ref-8 sap offset))
+ finally (return offset))))
+ (let ((result (make-string length :element-type 'base-char)))
+ (sb!kernel:copy-from-system-area sap 0
+ result (* sb!vm:vector-data-offset
+ sb!vm:n-word-bits)
+ (* length sb!vm:n-byte-bits))
+ result))))