Hello community,

here is the log from the commit of package guile-bytestructures for 
openSUSE:Factory checked in at 2018-06-20 15:30:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/guile-bytestructures (Old)
 and      /work/SRC/openSUSE:Factory/.guile-bytestructures.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "guile-bytestructures"

Wed Jun 20 15:30:31 2018 rev:2 rq:617557 version:1.0.3

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/guile-bytestructures/guile-bytestructures.changes    
    2018-03-12 12:11:37.211689992 +0100
+++ 
/work/SRC/openSUSE:Factory/.guile-bytestructures.new/guile-bytestructures.changes
   2018-06-20 15:31:37.021510085 +0200
@@ -1,0 +2,10 @@
+Thu Jun 14 09:28:40 UTC 2018 - [email protected]
+
+- Update to version 1.0.3
+  * fixes bsc#1097626
+  * fixes https://github.com/TaylanUB/scheme-bytestructures/issues/30 
+  * add test suite
+- package test suite (not executable by default, due to complaining
+  about #!/usr/bin/env)
+
+-------------------------------------------------------------------

Old:
----
  v1.0.1.tar.gz

New:
----
  v1.0.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ guile-bytestructures.spec ++++++
--- /var/tmp/diff_new_pack.M81OIK/_old  2018-06-20 15:31:39.965403274 +0200
+++ /var/tmp/diff_new_pack.M81OIK/_new  2018-06-20 15:31:39.965403274 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package guile-bytestructures
 #
-# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,10 +17,10 @@
 
 
 Name:           guile-bytestructures
-Version:        1.0.1
+Version:        1.0.3
 Release:        0
 Summary:        Bytestructures for Guile
-License:        GPL-3.0
+License:        GPL-3.0-only
 Group:          Development/Libraries/Other
 Url:            https://github.com/TaylanUB/scheme-bytestructures
 Source0:        
https://github.com/TaylanUB/scheme-bytestructures/archive/v%{version}.tar.gz
@@ -50,7 +50,7 @@
 %license COPYING
 %doc README.md
 %dir %{_datadir}/guile/site/2.*
-%{_datadir}/guile/site/2.*/bytestructures*
+%{_datadir}/guile/site/2.*/*
 %dir %{_libdir}/guile/2.*/site-ccache
 %{_libdir}/guile/2.*/site-ccache/bytestructures*
 

++++++ v1.0.1.tar.gz -> v1.0.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/scheme-bytestructures-1.0.1/Makefile.am 
new/scheme-bytestructures-1.0.3/Makefile.am
--- old/scheme-bytestructures-1.0.1/Makefile.am 2018-01-08 00:36:45.000000000 
+0100
+++ new/scheme-bytestructures-1.0.3/Makefile.am 2018-06-12 14:08:24.000000000 
+0200
@@ -24,6 +24,7 @@
        bytestructures/r6/bytevectors.scm
 
 NOCOMP_SOURCES =                                                       \
+       bytestructures/body/align.scm                                   \
        bytestructures/body/base.scm                                    \
        bytestructures/body/base.syntactic.scm                          \
        bytestructures/body/bitfields.scm                               \
@@ -42,7 +43,10 @@
        bytestructures/r7/string.exports.sld                            \
        bytestructures/r7/struct.exports.sld                            \
        bytestructures/r7/union.exports.sld                             \
-       bytestructures/r7/vector.exports.sld
+       bytestructures/r7/vector.exports.sld                            \
+       run-tests.body.scm                                              \
+       run-tests.guile.scm                                             \
+       run-tests.r7.scm
 
 EXTRA_DIST +=                                                          \
        COPYING                                                         \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/scheme-bytestructures-1.0.1/README.md 
new/scheme-bytestructures-1.0.3/README.md
--- old/scheme-bytestructures-1.0.1/README.md   2018-01-08 00:36:45.000000000 
+0100
+++ new/scheme-bytestructures-1.0.3/README.md   2018-06-12 14:08:24.000000000 
+0200
@@ -699,7 +699,7 @@
 the following two expressions are equivalent:
 
 ```scheme
-(define bs (bytestructure descriptor) values)
+(define bs (bytestructure descriptor values))
 
 (let ((bs (bytestructure descriptor)))
   (bytestructure-set! bs values)
@@ -728,6 +728,9 @@
 bytevector and offset.  Or if the getter is `#f`, then a bytestructure
 encapsulating that bytevector, offset, and descriptor is returned.
 
+Note that this means that calling `bytestructure-ref` with zero index
+arguments will return a bytestructure identical to the one provided.
+
 - `(bytestructure-set! bytestructure index ... value)` *syntax*
 
 Traverses through `bytestructure` using `bytestructure-unwrap` with
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/scheme-bytestructures-1.0.1/bytestructures/body/align.scm 
new/scheme-bytestructures-1.0.3/bytestructures/body/align.scm
--- old/scheme-bytestructures-1.0.1/bytestructures/body/align.scm       
1970-01-01 01:00:00.000000000 +0100
+++ new/scheme-bytestructures-1.0.3/bytestructures/body/align.scm       
2018-06-12 14:08:24.000000000 +0200
@@ -0,0 +1,44 @@
+;;; align.scm --- Alignment calculation helpers.
+
+;; Copyright © 2018 Taylan Ulrich Bayırlı/Kammer <[email protected]>
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+
+;;; Code:
+
+;;; Either remains at 'position' or rounds up to the next multiple of
+;;; 'alignment' depending on whether 'size' (if not greater than 'alignment')
+;;; would fit.  Returns three values: the chosen position, the start of the
+;;; alignment boundary of the chosen position, and the bit offset of the chosen
+;;; position from the start of the alignment boundary.  A bit is represented by
+;;; the value 1/8.
+(define (align position size alignment)
+  (let* ((integer (floor position))
+         (fraction (- position integer)))
+    (let-values (((prev-boundary-index offset) (floor/ integer alignment)))
+      (let* ((prev-boundary (* prev-boundary-index alignment))
+             (next-boundary (+ prev-boundary alignment)))
+        (if (< next-boundary (+ position (min size alignment)))
+            (values next-boundary next-boundary 0)
+            (values position prev-boundary (* 8 (+ offset fraction))))))))
+
+;;; Returns 'position' if it's already a multiple of 'alignment'; otherwise
+;;; returns the next multiple.
+(define (next-boundary position alignment)
+  (align position +inf.0 alignment))
+
+;;; align.scm ends here
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/scheme-bytestructures-1.0.1/bytestructures/body/numeric.scm 
new/scheme-bytestructures-1.0.3/bytestructures/body/numeric.scm
--- old/scheme-bytestructures-1.0.1/bytestructures/body/numeric.scm     
2018-01-08 00:36:45.000000000 +0100
+++ new/scheme-bytestructures-1.0.3/bytestructures/body/numeric.scm     
2018-06-12 14:08:24.000000000 +0200
@@ -24,10 +24,28 @@
 
 ;;; Code:
 
-(define-syntax-rule (make-numeric-descriptor <size> <getter> <setter>)
+(define i8align 1)
+
+(define i16align 2)
+
+(define i32align 4)
+
+(define i64align
+  (cond-expand
+   (i386 4)
+   (else 8)))
+
+(define f32align 4)
+
+(define f64align
+  (cond-expand
+   (i386 4)
+   (else 8)))
+
+(define-syntax-rule (make-numeric-descriptor <size> <align> <getter> <setter>)
   (let ()
     (define size <size>)
-    (define alignment <size>)
+    (define alignment <align>)
     (define (getter syntax? bytevector offset)
       (if syntax?
           (quasisyntax
@@ -41,89 +59,95 @@
     (make-bytestructure-descriptor size alignment #f getter setter)))
 
 (define-syntax-rule (define-numeric-descriptors <list>
-                      (<name> <size> <getter> <setter>)
+                      (<name> <size> <align> <getter> <setter>)
                       ...)
   (begin
     (define <name>
-      (make-numeric-descriptor <size> <getter> <setter>))
+      (make-numeric-descriptor <size> <align> <getter> <setter>))
     ...
     (define <list> (list (list <name> '<name> <getter> <setter>) ...))))
 
 (define-numeric-descriptors
   signed-integer-native-descriptors
-  (int8   1 bytevector-s8-ref bytevector-s8-set!)
-  (int16  2 bytevector-s16-native-ref bytevector-s16-native-set!)
-  (int32  4 bytevector-s32-native-ref bytevector-s32-native-set!)
-  (int64  8 bytevector-s64-native-ref bytevector-s64-native-set!))
+  (int8   1 i8align  bytevector-s8-ref bytevector-s8-set!)
+  (int16  2 i16align bytevector-s16-native-ref bytevector-s16-native-set!)
+  (int32  4 i32align bytevector-s32-native-ref bytevector-s32-native-set!)
+  (int64  8 i64align bytevector-s64-native-ref bytevector-s64-native-set!))
 
 (define-numeric-descriptors
   unsigned-integer-native-descriptors
-  (uint8  1 bytevector-u8-ref bytevector-u8-set!)
-  (uint16 2 bytevector-u16-native-ref bytevector-u16-native-set!)
-  (uint32 4 bytevector-u32-native-ref bytevector-u32-native-set!)
-  (uint64 8 bytevector-u64-native-ref bytevector-u64-native-set!))
+  (uint8  1 i8align bytevector-u8-ref bytevector-u8-set!)
+  (uint16 2 i16align bytevector-u16-native-ref bytevector-u16-native-set!)
+  (uint32 4 i32align bytevector-u32-native-ref bytevector-u32-native-set!)
+  (uint64 8 i64align bytevector-u64-native-ref bytevector-u64-native-set!))
 
 (define-numeric-descriptors
   float-native-descriptors
-  (float32
-   4 bytevector-ieee-single-native-ref bytevector-ieee-single-native-set!)
-  (float64
-   8 bytevector-ieee-double-native-ref bytevector-ieee-double-native-set!))
+  (float32 4 f32align
+           bytevector-ieee-single-native-ref
+           bytevector-ieee-single-native-set!)
+  (float64 8 f64align
+           bytevector-ieee-double-native-ref
+           bytevector-ieee-double-native-set!))
 
 (define-syntax-rule (define-with-endianness <list> <endianness>
-                      (<name> <size> <native-name> <getter> <setter>)
+                      (<name> <size> <align> <native-name> <getter> <setter>)
                       ...)
   (begin
     (define <name>
       (if (equal? <endianness> (native-endianness))
           <native-name>
-          (make-numeric-descriptor <size> <getter> <setter>)))
+          (make-numeric-descriptor <size> <align> <getter> <setter>)))
     ...
     (define <list> (list (list <name> '<name> <getter> <setter>) ...))))
 
 (define-with-endianness
   signed-integer-le-descriptors (endianness little)
-  (int16le 2 int16 bytevector-s16le-ref bytevector-s16le-set!)
-  (int32le 4 int32 bytevector-s32le-ref bytevector-s32le-set!)
-  (int64le 8 int64 bytevector-s64le-ref bytevector-s64le-set!))
+  (int16le 2 i16align int16 bytevector-s16le-ref bytevector-s16le-set!)
+  (int32le 4 i32align int32 bytevector-s32le-ref bytevector-s32le-set!)
+  (int64le 8 i64align int64 bytevector-s64le-ref bytevector-s64le-set!))
 
 (define-with-endianness
   signed-integer-be-descriptors (endianness big)
-  (int16be 2 int16 bytevector-s16be-ref bytevector-s16be-set!)
-  (int32be 4 int32 bytevector-s32be-ref bytevector-s32be-set!)
-  (int64be 8 int64 bytevector-s64be-ref bytevector-s64be-set!))
+  (int16be 2 i16align int16 bytevector-s16be-ref bytevector-s16be-set!)
+  (int32be 4 i32align int32 bytevector-s32be-ref bytevector-s32be-set!)
+  (int64be 8 i64align int64 bytevector-s64be-ref bytevector-s64be-set!))
 
 (define-with-endianness
   unsigned-integer-le-descriptors (endianness little)
-  (uint16le 2 uint16 bytevector-u16le-ref bytevector-u16le-set!)
-  (uint32le 4 uint32 bytevector-u32le-ref bytevector-u32le-set!)
-  (uint64le 8 uint64 bytevector-u64le-ref bytevector-u64le-set!))
+  (uint16le 2 i16align uint16 bytevector-u16le-ref bytevector-u16le-set!)
+  (uint32le 4 i32align uint32 bytevector-u32le-ref bytevector-u32le-set!)
+  (uint64le 8 i64align uint64 bytevector-u64le-ref bytevector-u64le-set!))
 
 (define-with-endianness
   unsigned-integer-be-descriptors (endianness big)
-  (uint16be 2 uint16 bytevector-u16be-ref bytevector-u16be-set!)
-  (uint32be 4 uint32 bytevector-u32be-ref bytevector-u32be-set!)
-  (uint64be 8 uint64 bytevector-u64be-ref bytevector-u64be-set!))
+  (uint16be 2 i16align uint16 bytevector-u16be-ref bytevector-u16be-set!)
+  (uint32be 4 i32align uint32 bytevector-u32be-ref bytevector-u32be-set!)
+  (uint64be 8 i64align uint64 bytevector-u64be-ref bytevector-u64be-set!))
 
 (define-with-endianness
   float-le-descriptors (endianness little)
-  (float32le
-   4 float32 bytevector-ieee-single-le-ref bytevector-ieee-single-le-set!)
-  (float64le
-   8 float64 bytevector-ieee-double-le-ref bytevector-ieee-double-le-set!))
+  (float32le 4 f32align float32
+             bytevector-ieee-single-le-ref
+             bytevector-ieee-single-le-set!)
+  (float64le 8 f64align float64
+             bytevector-ieee-double-le-ref
+             bytevector-ieee-double-le-set!))
 
 (define-with-endianness
   float-be-descriptors (endianness big)
-  (float32be
-   4 float32 bytevector-ieee-single-be-ref bytevector-ieee-single-be-set!)
-  (float64be
-   8 float64 bytevector-ieee-double-be-ref bytevector-ieee-double-be-set!))
+  (float32be 4 f32align float32
+             bytevector-ieee-single-be-ref
+             bytevector-ieee-single-be-set!)
+  (float64be 8 f64align float64
+             bytevector-ieee-double-be-ref
+             bytevector-ieee-double-be-set!))
 
 (define-syntax-rule (make-complex-descriptor
-                     <float-size> <float-getter> <float-setter>)
+                     <float-size> <float-align> <float-getter> <float-setter>)
   (let ()
     (define size (* 2 <float-size>))
-    (define alignment <float-size>)
+    (define alignment <float-align>)
     (define (getter syntax? bytevector offset)
       (if syntax?
           (quasisyntax
@@ -154,48 +178,57 @@
     (make-bytestructure-descriptor size alignment #f getter setter)))
 
 (define-syntax-rule (define-complex-descriptors <list>
-                      (<name> <float-size> <float-getter> <float-setter>)
+                      (<name> <float-size> <float-align>
+                              <float-getter> <float-setter>)
                       ...)
   (begin
     (define <name>
-      (make-complex-descriptor <float-size> <float-getter> <float-setter>))
+      (make-complex-descriptor <float-size> <float-align>
+                               <float-getter> <float-setter>))
     ...
     (define <list> (list (list <name> '<name> <float-getter> <float-setter>)
                          ...))))
 
 (define-complex-descriptors
   complex-native-descriptors
-  (complex64
-   4 bytevector-ieee-single-native-ref bytevector-ieee-single-native-set!)
-  (complex128
-   8 bytevector-ieee-double-native-ref bytevector-ieee-double-native-set!))
+  (complex64  4 f32align
+              bytevector-ieee-single-native-ref
+              bytevector-ieee-single-native-set!)
+  (complex128 8 f64align
+              bytevector-ieee-double-native-ref
+              bytevector-ieee-double-native-set!))
 
 (define-syntax-rule (define-complex-with-endianness <list> <endianness>
-                      (<name> <float-size> <native-name>
+                      (<name> <float-size> <float-align> <native-name>
                               <float-getter> <float-setter>)
                       ...)
   (begin
     (define <name>
       (if (equal? <endianness> (native-endianness))
           <native-name>
-          (make-complex-descriptor <float-size> <float-getter> 
<float-setter>)))
+          (make-complex-descriptor <float-size> <float-align>
+                                   <float-getter> <float-setter>)))
     ...
     (define <list> (list (list <name> '<name> <float-getter> <float-setter>)
                          ...))))
 
 (define-complex-with-endianness
   complex-le-descriptors (endianness little)
-  (complex64le
-   4 complex64  bytevector-ieee-single-le-ref bytevector-ieee-single-le-set!)
-  (complex128le
-   8 complex128 bytevector-ieee-double-le-ref bytevector-ieee-double-le-set!))
+  (complex64le  4 f32align complex64
+                bytevector-ieee-single-le-ref
+                bytevector-ieee-single-le-set!)
+  (complex128le 8 f64align complex128
+                bytevector-ieee-double-le-ref
+                bytevector-ieee-double-le-set!))
 
 (define-complex-with-endianness
   complex-be-descriptors (endianness big)
-  (complex64be
-   4 complex64  bytevector-ieee-single-be-ref bytevector-ieee-single-be-set!)
-  (complex128be
-   8 complex128 bytevector-ieee-double-be-ref bytevector-ieee-double-be-set!))
+  (complex64be  4 f32align complex64
+                bytevector-ieee-single-be-ref
+                bytevector-ieee-single-be-set!)
+  (complex128be 8 f64align complex128
+                bytevector-ieee-double-be-ref
+                bytevector-ieee-double-be-set!))
 
 (define signed-integer-descriptors
   (append signed-integer-native-descriptors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/scheme-bytestructures-1.0.1/bytestructures/body/struct.scm 
new/scheme-bytestructures-1.0.3/bytestructures/body/struct.scm
--- old/scheme-bytestructures-1.0.1/bytestructures/body/struct.scm      
2018-01-08 00:36:45.000000000 +0100
+++ new/scheme-bytestructures-1.0.3/bytestructures/body/struct.scm      
2018-06-12 14:08:24.000000000 +0200
@@ -26,26 +26,6 @@
 
 ;;; Code:
 
-;;; Either remains at 'position' or rounds up to the next multiple of
-;;; 'alignment' depending on whether 'size' (if not greater than 'alignment')
-;;; would fit.  Returns three values: the chosen position, the start of the
-;;; alignment boundary of the chosen position, and the bit offset of the chosen
-;;; position from the start of the alignment boundary.
-(define (align position size alignment)
-  (let* ((integer (floor position))
-         (fraction (- position integer)))
-    (let-values (((prev-boundary-index offset) (floor/ integer alignment)))
-      (let* ((prev-boundary (* prev-boundary-index alignment))
-             (next-boundary (+ prev-boundary alignment)))
-        (if (< next-boundary (+ position (min size alignment)))
-            (values next-boundary next-boundary 0)
-            (values position prev-boundary (* 8 (+ offset fraction))))))))
-
-;;; Returns 'position' if it's already a multiple of 'alignment'; otherwise
-;;; returns the next multiple.
-(define (next-boundary position alignment)
-  (align position +inf.0 alignment))
-
 (define (pack-alignment pack alignment)
   (case pack
     ((#t) 1)
@@ -194,8 +174,11 @@
          (make-struct-metadata simple-field-alist)))
      (make-bytestructure-descriptor size alignment unwrapper #f setter meta))))
 
-(define (debug-alignment pack fields)
-  (let* ((fields (construct-fields pack fields))
+(define debug-alignment
+  (case-lambda
+   ((fields) (debug-alignment #f fields))
+   ((pack fields)
+    (let* ((fields (construct-fields pack fields))
          (alignment (apply max (map field-alignment fields)))
          (size (let* ((field (last fields))
                       (end (+ (field-position field) (field-size field))))
@@ -203,11 +186,13 @@
     (format #t "{\n")
     (for-each (lambda (field)
                 (let ((name (field-name field))
-                      (pos (field-position field))
-                      (size (field-size field)))
-                  (format #t "  ~a: ~a:~a\n" (* 8 pos) name (* 8 size))))
+                      (pos (* 8 (field-position field)))
+                      (size (* 8 (field-size field)))
+                      (align (* 8 (field-alignment field))))
+                  (format #t "  ~a - ~a: ~a (~a, ~a)\n"
+                          pos (+ pos size) name size align)))
               fields)
     (format #t "} = ~a\n" (* 8 size))
-    (values)))
+    (values)))))
 
 ;;; struct.scm ends here
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/scheme-bytestructures-1.0.1/bytestructures/body/union.scm 
new/scheme-bytestructures-1.0.3/bytestructures/body/union.scm
--- old/scheme-bytestructures-1.0.1/bytestructures/body/union.scm       
2018-01-08 00:36:45.000000000 +0100
+++ new/scheme-bytestructures-1.0.3/bytestructures/body/union.scm       
2018-06-12 14:08:24.000000000 +0200
@@ -40,14 +40,16 @@
 
 (define (bs:union %fields)
   (define fields (construct-fields %fields))
-  (define size (apply max (map (lambda (field)
-                                 (bytestructure-descriptor-size
-                                  (field-content field)))
-                               fields)))
   (define alignment (apply max (map (lambda (field)
                                       (bytestructure-descriptor-alignment
                                        (field-content field)))
                                     fields)))
+  (define size (let ((max-element
+                      (apply max (map (lambda (field)
+                                        (bytestructure-descriptor-size
+                                         (field-content field)))
+                                      fields))))
+                 (next-boundary max-element alignment)))
   (define (unwrapper syntax? bytevector offset index)
     (let ((index (if syntax? (syntax->datum index) index)))
       (values bytevector
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/scheme-bytestructures-1.0.1/bytestructures/guile/ffi.scm 
new/scheme-bytestructures-1.0.3/bytestructures/guile/ffi.scm
--- old/scheme-bytestructures-1.0.1/bytestructures/guile/ffi.scm        
2018-01-08 00:36:45.000000000 +0100
+++ new/scheme-bytestructures-1.0.3/bytestructures/guile/ffi.scm        
2018-06-12 14:08:24.000000000 +0200
@@ -54,7 +54,7 @@
     (,float64 . ,ffi:double)))
 
 (define (bytestructure-descriptor->ffi-descriptor descriptor)
-  (define (convert descriptor top-level?)
+  (define (convert descriptor)
     (cond
      ((assq descriptor numeric-type-mapping)
       => (match-lambda ((key . val) val)))
@@ -62,16 +62,11 @@
       (let ((metadata (bytestructure-descriptor-metadata descriptor)))
         (cond
          ((vector-metadata? metadata)
-          (if top-level?
-              '*
-              (make-list
-               (vector-metadata-length metadata)
-               (convert (vector-metadata-element-descriptor metadata) #f))))
+          (make-list
+           (vector-metadata-length metadata)
+           (convert (vector-metadata-element-descriptor metadata))))
          ((struct-metadata? metadata)
-          (map (lambda (descriptor)
-                 (convert descriptor #f))
-               (map (match-lambda ((field-name . descriptor) descriptor))
-                    (struct-metadata-field-alist metadata))))
+          (map convert (map cdr (struct-metadata-field-alist metadata))))
          ((union-metadata? metadata)
           ;; TODO: Add support once Guile/libffi supports this.
           (error "Unions not supported." descriptor))
@@ -82,7 +77,13 @@
           (error "Bitfields not supported." descriptor))
          (else
           (error "Unsupported bytestructure descriptor." descriptor)))))))
-  (convert descriptor #t))
+  (cond
+   ((eq? descriptor 'void)
+    ffi:void)
+   ((vector-metadata? (bytestructure-descriptor-metadata descriptor))
+    '*)
+   (else
+    (convert descriptor))))
 
 (define (bs:pointer->proc ret-type func-ptr arg-types)
   (define (type->raw-type type)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/scheme-bytestructures-1.0.1/bytestructures/guile/numeric-data-model.scm 
new/scheme-bytestructures-1.0.3/bytestructures/guile/numeric-data-model.scm
--- old/scheme-bytestructures-1.0.1/bytestructures/guile/numeric-data-model.scm 
2018-01-08 00:36:45.000000000 +0100
+++ new/scheme-bytestructures-1.0.3/bytestructures/guile/numeric-data-model.scm 
2018-06-12 14:08:24.000000000 +0200
@@ -1,5 +1,20 @@
 (define-module (bytestructures guile numeric-data-model))
+
 (import (system foreign))
+(import (system base target))
+
+(define architecture
+  (let ((cpu (target-cpu)))
+    (cond
+     ((member cpu '("i386" "i486" "i586" "i686"))
+      'i386)
+     ((string=? "x86_64" cpu)
+      'x86-64)
+     ((string-prefix? "arm" cpu)
+      'arm)
+     ((string-prefix? "aarch64" cpu)
+      'aarch64))))
+
 (define data-model
   (if (= 4 (sizeof '*))
       (if (= 2 (sizeof int))
@@ -9,4 +24,7 @@
        ((= 8 (sizeof int))  'ilp64)
        ((= 4 (sizeof long)) 'llp64)
        (else                'lp64))))
-(cond-expand-provide (current-module) (list data-model))
+
+(cond-expand-provide
+ (current-module)
+ (list architecture data-model))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/scheme-bytestructures-1.0.1/bytestructures/guile/struct.scm 
new/scheme-bytestructures-1.0.3/bytestructures/guile/struct.scm
--- old/scheme-bytestructures-1.0.1/bytestructures/guile/struct.scm     
2018-01-08 00:36:45.000000000 +0100
+++ new/scheme-bytestructures-1.0.3/bytestructures/guile/struct.scm     
2018-06-12 14:08:24.000000000 +0200
@@ -7,5 +7,6 @@
  (bytestructures guile utils)
  (bytestructures guile base)
  (bytestructures guile bitfields))
+(include-from-path "bytestructures/body/align.scm")
 (include-from-path "bytestructures/body/struct.scm")
 (include-from-path "bytestructures/r7/struct.exports.sld")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/scheme-bytestructures-1.0.1/bytestructures/guile/union.scm 
new/scheme-bytestructures-1.0.3/bytestructures/guile/union.scm
--- old/scheme-bytestructures-1.0.1/bytestructures/guile/union.scm      
2018-01-08 00:36:45.000000000 +0100
+++ new/scheme-bytestructures-1.0.3/bytestructures/guile/union.scm      
2018-06-12 14:08:24.000000000 +0200
@@ -5,5 +5,6 @@
  (bytestructures guile bytevectors)
  (bytestructures guile utils)
  (bytestructures guile base))
+(include-from-path "bytestructures/body/align.scm")
 (include-from-path "bytestructures/body/union.scm")
 (include-from-path "bytestructures/r7/union.exports.sld")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/scheme-bytestructures-1.0.1/bytestructures/r7/struct.sld 
new/scheme-bytestructures-1.0.3/bytestructures/r7/struct.sld
--- old/scheme-bytestructures-1.0.1/bytestructures/r7/struct.sld        
2018-01-08 00:36:45.000000000 +0100
+++ new/scheme-bytestructures-1.0.3/bytestructures/r7/struct.sld        
2018-06-12 14:08:24.000000000 +0200
@@ -8,4 +8,5 @@
    (bytestructures r7 base)
    (bytestructures r7 bitfields))
   (include-library-declarations "struct.exports.sld")
+  (include "body/align.scm")
   (include "body/struct.scm"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/scheme-bytestructures-1.0.1/bytestructures/r7/union.sld 
new/scheme-bytestructures-1.0.3/bytestructures/r7/union.sld
--- old/scheme-bytestructures-1.0.1/bytestructures/r7/union.sld 2018-01-08 
00:36:45.000000000 +0100
+++ new/scheme-bytestructures-1.0.3/bytestructures/r7/union.sld 2018-06-12 
14:08:24.000000000 +0200
@@ -4,4 +4,5 @@
    (bytestructures r7 utils)
    (bytestructures r7 base))
   (include-library-declarations "union.exports.sld")
+  (include "body/align.scm")
   (include "body/union.scm"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/scheme-bytestructures-1.0.1/configure.ac 
new/scheme-bytestructures-1.0.3/configure.ac
--- old/scheme-bytestructures-1.0.1/configure.ac        2018-01-08 
00:36:45.000000000 +0100
+++ new/scheme-bytestructures-1.0.3/configure.ac        2018-06-12 
14:08:24.000000000 +0200
@@ -1,4 +1,4 @@
-AC_INIT([bytestructures], [1.0.1], [], [], 
[https://github.com/TaylanUB/scheme-bytestructures/])
+AC_INIT([bytestructures], [1.0.3], [], [], 
[https://github.com/TaylanUB/scheme-bytestructures/])
 AC_CONFIG_SRCDIR(bytestructures)
 AC_CONFIG_MACRO_DIR([m4])
 AM_INIT_AUTOMAKE([-Wall -Werror foreign color-tests])


Reply via email to