From c1a0e50ef15b52bc252515a1ba6b5a4881e8becd Mon Sep 17 00:00:00 2001 From: hxz Date: Tue, 30 May 2023 14:51:36 +0800 Subject: [PATCH] use memcpy instead of foreign-array-to-lisp to copy c bytes to lisp vector --- src/utilities.lisp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/utilities.lisp b/src/utilities.lisp index 154014a..2295ce0 100644 --- a/src/utilities.lisp +++ b/src/utilities.lisp @@ -47,8 +47,12 @@ (defun unpack-foreign-msg-to-bytes (msg) "Converts a foreign array of unsigned characters to a Lisp vector of such." - (cffi:foreign-array-to-lisp (pzmq:msg-data msg) - `(:array :uint8 ,(pzmq:msg-size msg)))) + (flet ((copy-foreign-bytes (pointer len) + (let ((lisp-vector (cffi:make-shareable-byte-vector len))) + (cffi:with-pointer-to-vector-data (vec-ptr lisp-vector) + (cffi:foreign-funcall "memcpy" :pointer vec-ptr :pointer pointer :size len :pointer) + lisp-vector)))) + (copy-foreign-bytes (pzmq:msg-data msg) (pzmq:msg-size msg)))) (defun global-function-p (symbol) "Return true if SYMBOL is a symbol naming a global function. Return false otherwise."