[PATCH] Fixed bytevector size checks in macros write-c-struct and read-c-struct

Tommi Höynälänmaa <[email protected]> Thu, 4 Dec 2025 15:40:59 +0200
Newsgroups gmane.lisp.guile.devel
Message-ID <[email protected]>
Here is a test case for write-struct:

---cut here---

(use-modules (system foreign))
(use-modules (rnrs))
(use-modules (srfi srfi-43))

(define (dbg x)
   (display x)
   (newline)
   (flush-all-ports))

(define (make-c-pointer-array v-src)
   (dbg "make-c-pointer-array")
   (assert (and (vector? v-src) (vector-every pointer? v-src)))
   (let* ((i-len (vector-length v-src))
          (i-element-size (sizeof '*))
          (i-bv-size (* i-len i-element-size))
          (bv (make-bytevector i-bv-size 0)))
     (dbg i-element-size)
     (dbg i-bv-size)
     (do ((i-element 0 (+ i-element 1))) ((>= i-element i-len))
       (let ((x-element (vector-ref v-src i-element)))
         (dbg "make-c-pointer-array/1")
         (dbg x-element)
         (dbg i-element)
         (write-c-struct
          bv
          (* i-element i-element-size)
          ((x-element '*)))))
     (bytevector->pointer bv)))

(define (main args)
   (display (make-c-pointer-array (vector %null-pointer %null-pointer)))
   (newline))

---cut-here---

and here for read-struct:

---cut here---

(use-modules (rnrs bytevectors)
              (system foreign))

(define bv (make-bytevector 16 0))

(define struct1 (make-c-struct (list '* '*) (list %null-pointer 
%null-pointer)))

(define (main args)
   (display (read-c-struct bv 0 ((fld1 '*)) list))
   (newline))

---cut-here---

Both tests are executed by command guile -e main -s FILENAME.scm.

      - Tommi

-- 
Kotisivu / Homepage: http://www.iki.fi/tohoyn/
Sähköposti / E-Mail: [email protected]
GPG-sormenjälki / GPG fingerprint:
55F4 2477 7155 3528 5CB2 2B7A BB86 1FDE 4046 0F83
FT, Debian-ylläpitäjä / PhD, Debian Maintainer