* Allow to convert an array of bytes to a list. Thanks to Masao Uebayashi.
authorDirk Herrmann <dirk@dirk-herrmanns-seiten.de>
Thu, 19 Apr 2001 16:27:01 +0000 (16:27 +0000)
committerDirk Herrmann <dirk@dirk-herrmanns-seiten.de>
Thu, 19 Apr 2001 16:27:01 +0000 (16:27 +0000)
THANKS
libguile/ChangeLog
libguile/unif.c

diff --git a/THANKS b/THANKS
index 9b98b45..b8d24c9 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -34,6 +34,7 @@ For fixes or providing information which led to a fix:
        Bill Schottstaedt
    Miroslav Silovic
     Dale P. Smith
+      Masao Uebayashi
  Jacques A. Vidrine
       Brett Viren
     William Webber
index d8cff08..a7525c6 100644 (file)
@@ -1,3 +1,8 @@
+2001-04-19  Dirk Herrmann  <D.Herrmann@tu-bs.de>
+
+       * unif.c (scm_array_to_list):  Added missing handling of arrays of
+       bytes.  Thanks to Masao Uebayashi for the bug report.
+
 2001-04-19  Dirk Herrmann  <D.Herrmann@tu-bs.de>
 
        * debug.c (scm_procedure_source):  Use SCM_CLOSURE_FORMALS more
index d183ddd..afb0a0c 100644 (file)
@@ -2108,36 +2108,44 @@ SCM_DEFINE (scm_array_to_list, "array->list", 1, 0, 0,
          res = scm_cons (SCM_BOOL(((long *) data)[k] & mask), res);
        return res;
       }
-  case scm_tc7_uvect: {
-    long *data = (long *)SCM_VELTS(v);
-    for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
-      res = scm_cons(scm_ulong2num(data[k]), res);
-    return res;
-  }
-  case scm_tc7_ivect: {
-    long *data = (long *)SCM_VELTS(v);
-    for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
-      res = scm_cons(scm_long2num(data[k]), res);
-    return res;
-  }
-    case scm_tc7_svect: {
-      short *data;
-      data = (short *)SCM_VELTS(v);
-      for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
-       res = scm_cons(SCM_MAKINUM (data[k]), res);
-      return res;
-    }
+    case scm_tc7_byvect:
+      {
+       signed char *data = (signed char *) SCM_VELTS (v);
+       scm_sizet k = SCM_UVECTOR_LENGTH (v);
+       while (k != 0)
+         res = scm_cons (SCM_MAKINUM (data[--k]), res);
+       return res;
+      }
+    case scm_tc7_uvect:
+      {
+       long *data = (long *)SCM_VELTS(v);
+       for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
+         res = scm_cons(scm_ulong2num(data[k]), res);
+       return res;
+      }
+    case scm_tc7_ivect:
+      {
+       long *data = (long *)SCM_VELTS(v);
+       for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
+         res = scm_cons(scm_long2num(data[k]), res);
+       return res;
+      }
+    case scm_tc7_svect:
+      {
+       short *data = (short *)SCM_VELTS(v);
+       for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
+         res = scm_cons(SCM_MAKINUM (data[k]), res);
+       return res;
+      }
 #ifdef HAVE_LONG_LONGS
-    case scm_tc7_llvect: {
-      long_long *data;
-      data = (long_long *)SCM_VELTS(v);
-      for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
-       res = scm_cons(scm_long_long2num(data[k]), res);
-      return res;
-    }
+    case scm_tc7_llvect:
+      {
+       long_long *data = (long_long *)SCM_VELTS(v);
+       for (k = SCM_UVECTOR_LENGTH(v) - 1; k >= 0; k--)
+         res = scm_cons(scm_long_long2num(data[k]), res);
+       return res;
+      }
 #endif
-
-
     case scm_tc7_fvect:
       {
        float *data = (float *) SCM_VELTS (v);