* module/system/foreign.scm (parse-c-struct): Honor alignment
constraints for TYPE.
* test-suite/tests/foreign.test ("structs")["alignment constraints
honored"]: New test.
(define (parse-c-struct foreign types)
(let ((size (fold (lambda (type total)
- (+ (sizeof type) total))
+ (+ (sizeof type)
+ (align total (alignof type))))
0
types)))
(read-c-struct (pointer->bytevector foreign size) 0 types)))
(pass-if "parse-c-struct"
(let ((layout (list int64 uint8))
(data (list -300 43)))
+ (equal? (parse-c-struct (make-c-struct layout data)
+ layout)
+ data)))
+
+ (pass-if "alignment constraints honored"
+ (let ((layout (list int8 double))
+ (data (list -7 3.14)))
(equal? (parse-c-struct (make-c-struct layout data)
layout)
data))))