From af7546ebe2b4340c2d0a679f0e8291266e663d9b Mon Sep 17 00:00:00 2001 From: Dirk Herrmann Date: Thu, 19 Apr 2001 16:27:01 +0000 Subject: [PATCH] * Allow to convert an array of bytes to a list. Thanks to Masao Uebayashi. --- THANKS | 1 + libguile/ChangeLog | 5 ++++ libguile/unif.c | 64 ++++++++++++++++++++++++++-------------------- 3 files changed, 42 insertions(+), 28 deletions(-) diff --git a/THANKS b/THANKS index 9b98b45a7..b8d24c973 100644 --- 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 diff --git a/libguile/ChangeLog b/libguile/ChangeLog index d8cff0871..a7525c6f5 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,3 +1,8 @@ +2001-04-19 Dirk Herrmann + + * 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 * debug.c (scm_procedure_source): Use SCM_CLOSURE_FORMALS more diff --git a/libguile/unif.c b/libguile/unif.c index d183dddb9..afb0a0cf2 100644 --- a/libguile/unif.c +++ b/libguile/unif.c @@ -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);