diff options
author | Stefan Jahn <stefan@lkcc.org> | 2002-02-27 15:41:01 +0000 |
---|---|---|
committer | Stefan Jahn <stefan@lkcc.org> | 2002-02-27 15:41:01 +0000 |
commit | edb810bb84ca1198d4ff34712877ee681b15c5fb (patch) | |
tree | fcad43dec94868a53aede4540d0853ede131ea4a | |
parent | d51b42e28b4135545b5e5932b5a55210328fa706 (diff) | |
download | guile-edb810bb84ca1198d4ff34712877ee681b15c5fb.tar.gz |
2002-02-27 Stefan Jahn <stefan@lkcc.org>
* Makefile.am (SUBDIRS): Added the `am' directory.
2002-02-27 Stefan Jahn <stefan@lkcc.org>
* gh.texi (scm transition summary): Documented some more
gh equivalents and removed appropriate FIXME's.
2002-02-27 Stefan Jahn <stefan@lkcc.org>
* Makefile.am (EXTRA_DIST): Added the `LIBGUILEREADLINE-VERSION'
file.
2002-02-27 Stefan Jahn <stefan@lkcc.org>
* convert.i.c, convert.c: Better range checking.
* inet_aton.c, fports.c: Commented the inclusion of <winsock2.h>.
* deprecation.c (vsnprintf): Define to `_vsnprintf' for
Windows (MinGW).
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | doc/ref/ChangeLog | 5 | ||||
-rw-r--r-- | doc/ref/gh.texi | 14 | ||||
-rw-r--r-- | guile-readline/ChangeLog | 5 | ||||
-rw-r--r-- | guile-readline/Makefile.am | 2 | ||||
-rw-r--r-- | libguile/ChangeLog | 9 | ||||
-rw-r--r-- | libguile/convert.c | 145 | ||||
-rw-r--r-- | libguile/convert.i.c | 189 | ||||
-rw-r--r-- | libguile/deprecation.c | 5 | ||||
-rw-r--r-- | libguile/fports.c | 3 | ||||
-rw-r--r-- | libguile/inet_aton.c | 1 |
12 files changed, 222 insertions, 162 deletions
@@ -1,3 +1,7 @@ +2002-02-27 Stefan Jahn <stefan@lkcc.org> + + * Makefile.am (SUBDIRS): Added the `am' directory. + 2002-02-26 Thien-Thi Nguyen <ttn@giblet.glug.org> * pre-inst-guile.in: New file. diff --git a/Makefile.am b/Makefile.am index ea26d8692..5ea356b15 100644 --- a/Makefile.am +++ b/Makefile.am @@ -21,7 +21,7 @@ SUBDIRS = oop qt libltdl libguile ice-9 guile-config guile-readline \ - scripts srfi doc examples test-suite lang + scripts srfi doc examples test-suite lang am bin_SCRIPTS = guile-tools diff --git a/doc/ref/ChangeLog b/doc/ref/ChangeLog index 5f18640a3..61e661d61 100644 --- a/doc/ref/ChangeLog +++ b/doc/ref/ChangeLog @@ -1,3 +1,8 @@ +2002-02-27 Stefan Jahn <stefan@lkcc.org> + + * gh.texi (scm transition summary): Documented some more + gh equivalents and removed appropriate FIXME's. + 2002-02-26 Thien-Thi Nguyen <ttn@giblet.glug.org> * Makefile.am: Update path to pre-inst-guile automake frag. diff --git a/doc/ref/gh.texi b/doc/ref/gh.texi index 9b2e9850e..1cadc168a 100644 --- a/doc/ref/gh.texi +++ b/doc/ref/gh.texi @@ -929,16 +929,16 @@ Use @code{scm_str2symbol} instead. [FIXME: inconsistent naming, should be @code{scm_str02symbol}.] @item @code{gh_ints2scm} and @code{gh_doubles2scm} -No direct scm equivalent. [FIXME] +Use @code{scm_c_ints2scm} and @code{scm_c_doubles2scm} instead. @item @code{gh_chars2byvect} and @code{gh_shorts2svect} -No direct scm equivalent. [FIXME] +Use @code{scm_c_chars2byvect} and @code{scm_c_shorts2svect} instead. @item @code{gh_longs2ivect} and @code{gh_ulongs2uvect} -No direct scm equivalent. [FIXME] +Use @code{scm_c_longs2ivect} and @code{scm_c_ulongs2uvect} instead. @item @code{gh_floats2fvect} and @code{gh_doubles2dvect} -No direct scm equivalent. [FIXME] +Use @code{scm_c_floats2fvect} and @code{scm_c_doubles2dvect} instead. @item @code{gh_scm2bool} Use @code{SCM_NFALSEP} instead. @@ -993,13 +993,13 @@ instead. With the additional @var{str} argument the user can pass a pre-allocated memory chunk or leave it passing NULL. @item @code{gh_scm2chars} -No direct scm equivalent. [FIXME] +Use @code{scm_c_scm2chars} instead. @item @code{gh_scm2shorts} and @code{gh_scm2longs} -No direct scm equivalent. [FIXME] +Use @code{scm_c_shorts2scm} and @code{scm_c_longs2scm} instead. @item @code{gh_scm2floats} and @code{gh_scm2doubles} -No direct scm equivalent. [FIXME] +Use @code{scm_c_floats2scm} and @code{scm_c_doubles2scm} instead. @item @code{gh_boolean_p} Use the @code{SCM_BOOLP} macro instead, or replace @code{gh_boolean_p diff --git a/guile-readline/ChangeLog b/guile-readline/ChangeLog index 29491889e..5e6503db0 100644 --- a/guile-readline/ChangeLog +++ b/guile-readline/ChangeLog @@ -1,3 +1,8 @@ +2002-02-27 Stefan Jahn <stefan@lkcc.org> + + * Makefile.am (EXTRA_DIST): Added the `LIBGUILEREADLINE-VERSION' + file. + 2002-02-25 Thien-Thi Nguyen <ttn@giblet.glug.org> * configure.in (LIBGUILEREADLINE-VERSION): diff --git a/guile-readline/Makefile.am b/guile-readline/Makefile.am index bf5b0ba75..c8cb59eff 100644 --- a/guile-readline/Makefile.am +++ b/guile-readline/Makefile.am @@ -50,7 +50,7 @@ SUFFIXES = .x $(GUILE_SNARF) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $< > $@ \ || { rm $@; false; } -EXTRA_DIST = $(ice9_DATA) +EXTRA_DIST = $(ice9_DATA) LIBGUILEREADLINE-VERSION ETAGS_ARGS = $(ice9_DATA) MKDEP = gcc -M -MG $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) diff --git a/libguile/ChangeLog b/libguile/ChangeLog index a3704cbe0..ae93bdc1d 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,3 +1,12 @@ +2002-02-27 Stefan Jahn <stefan@lkcc.org> + + * convert.i.c, convert.c: Better range checking. + + * inet_aton.c, fports.c: Commented the inclusion of <winsock2.h>. + + * deprecation.c (vsnprintf): Define to `_vsnprintf' for + Windows (MinGW). + 2002-02-26 Thien-Thi Nguyen <ttn@giblet.glug.org> * Makefile.am: Update path to pre-inst-guile automake frag. diff --git a/libguile/convert.c b/libguile/convert.c index cbec8fa2a..d6606d555 100644 --- a/libguile/convert.c +++ b/libguile/convert.c @@ -56,91 +56,90 @@ #include <string.h> #endif -#define CTYPE char -#define SCM2CTYPES_FN "scm_c_scm2chars" -#define SCM2CTYPES scm_c_scm2chars -#define CTYPES2SCM_FN "scm_c_chars2scm" -#define CTYPES2SCM scm_c_chars2scm -#define CTYPEFIXABLE +#define CTYPE char +#define SIZEOF_CTYPE 1 +#define SCM2CTYPES_FN "scm_c_scm2chars" +#define SCM2CTYPES scm_c_scm2chars +#define CTYPES2SCM_FN "scm_c_chars2scm" +#define CTYPES2SCM scm_c_chars2scm #define CTYPES2UVECT_FN "scm_c_chars2byvect" -#define CTYPES2UVECT scm_c_chars2byvect -#define UVECTTYPE scm_tc7_byvect -#define CTYPEMIN -128 -#define CTYPEMAX +255 -#define ARRAYTYPE1 scm_tc7_byvect -#define STRINGTYPE +#define CTYPES2UVECT scm_c_chars2byvect +#define UVECTTYPE scm_tc7_byvect +#define ARRAYTYPE scm_tc7_byvect #include "convert.i.c" -#define CTYPE short -#define SCM2CTYPES_FN "scm_c_scm2shorts" -#define SCM2CTYPES scm_c_scm2shorts -#define CTYPES2SCM_FN "scm_c_shorts2scm" -#define CTYPES2SCM scm_c_shorts2scm -#define CTYPEFIXABLE +#define CTYPE short +#define SIZEOF_CTYPE SIZEOF_SHORT +#define SCM2CTYPES_FN "scm_c_scm2shorts" +#define SCM2CTYPES scm_c_scm2shorts +#define CTYPES2SCM_FN "scm_c_shorts2scm" +#define CTYPES2SCM scm_c_shorts2scm #define CTYPES2UVECT_FN "scm_c_shorts2svect" -#define CTYPES2UVECT scm_c_shorts2svect -#define UVECTTYPE scm_tc7_svect -#define CTYPEMIN -32768 -#define CTYPEMAX +65535 -#define ARRAYTYPE1 scm_tc7_svect +#define CTYPES2UVECT scm_c_shorts2svect +#define UVECTTYPE scm_tc7_svect +#define ARRAYTYPE scm_tc7_svect #include "convert.i.c" -#define CTYPE int -#define SCM2CTYPES_FN "scm_c_scm2ints" -#define SCM2CTYPES scm_c_scm2ints -#define CTYPES2SCM_FN "scm_c_ints2scm" -#define CTYPES2SCM scm_c_ints2scm -#define CTYPES2UVECT_FN "scm_c_ints2ivect" -#define CTYPES2UVECT scm_c_ints2ivect -#define UVECTTYPE scm_tc7_ivect -#define CTYPES2UVECT_FN2 "scm_c_uints2uvect" -#define CTYPES2UVECT2 scm_c_uints2uvect -#define UVECTTYPE2 scm_tc7_uvect -#define ARRAYTYPE1 scm_tc7_ivect -#define ARRAYTYPE2 scm_tc7_uvect +#define CTYPE int +#define SIZEOF_CTYPE SIZEOF_INT +#define SCM2CTYPES_FN "scm_c_scm2ints" +#define SCM2CTYPES scm_c_scm2ints +#define CTYPES2SCM_FN "scm_c_ints2scm" +#define CTYPES2SCM scm_c_ints2scm +#define CTYPES2UVECT_FN "scm_c_ints2ivect" +#define CTYPES2UVECT scm_c_ints2ivect +#define UVECTTYPE scm_tc7_ivect +#define CTYPES2UVECT_FN_OPTIONAL "scm_c_uints2uvect" +#define CTYPES2UVECT_OPTIONAL scm_c_uints2uvect +#define UVECTTYPE_OPTIONAL scm_tc7_uvect +#define ARRAYTYPE scm_tc7_ivect +#define ARRAYTYPE_OPTIONAL scm_tc7_uvect #include "convert.i.c" -#define CTYPE long -#define SCM2CTYPES_FN "scm_c_scm2longs" -#define SCM2CTYPES scm_c_scm2longs -#define CTYPES2SCM_FN "scm_c_longs2scm" -#define CTYPES2SCM scm_c_longs2scm -#define CTYPES2UVECT_FN "scm_c_longs2ivect" -#define CTYPES2UVECT scm_c_longs2ivect -#define UVECTTYPE scm_tc7_ivect -#define CTYPES2UVECT_FN2 "scm_c_ulongs2uvect" -#define CTYPES2UVECT2 scm_c_ulongs2uvect -#define UVECTTYPE2 scm_tc7_uvect -#define ARRAYTYPE1 scm_tc7_ivect -#define ARRAYTYPE2 scm_tc7_uvect +#define CTYPE long +#define SIZEOF_CTYPE SIZEOF_LONG +#define SCM2CTYPES_FN "scm_c_scm2longs" +#define SCM2CTYPES scm_c_scm2longs +#define CTYPES2SCM_FN "scm_c_longs2scm" +#define CTYPES2SCM scm_c_longs2scm +#define CTYPES2UVECT_FN "scm_c_longs2ivect" +#define CTYPES2UVECT scm_c_longs2ivect +#define UVECTTYPE scm_tc7_ivect +#define CTYPES2UVECT_FN_OPTIONAL "scm_c_ulongs2uvect" +#define CTYPES2UVECT_OPTIONAL scm_c_ulongs2uvect +#define UVECTTYPE_OPTIONAL scm_tc7_uvect +#define ARRAYTYPE scm_tc7_ivect +#define ARRAYTYPE_OPTIONAL scm_tc7_uvect #include "convert.i.c" -#define CTYPE float -#define SCM2CTYPES_FN "scm_c_scm2floats" -#define SCM2CTYPES scm_c_scm2floats -#define CTYPES2SCM_FN "scm_c_floats2scm" -#define CTYPES2SCM scm_c_floats2scm -#define CTYPES2UVECT_FN "scm_c_floats2fvect" -#define CTYPES2UVECT scm_c_floats2fvect -#define UVECTTYPE scm_tc7_fvect -#define ARRAYTYPE1 scm_tc7_fvect -#define ARRAYTYPE2 scm_tc7_dvect -#define FLOATTYPE1 float -#define FLOATTYPE2 double +#define CTYPE float +#define SIZEOF_CTYPE 0 +#define SCM2CTYPES_FN "scm_c_scm2floats" +#define SCM2CTYPES scm_c_scm2floats +#define CTYPES2SCM_FN "scm_c_floats2scm" +#define CTYPES2SCM scm_c_floats2scm +#define CTYPES2UVECT_FN "scm_c_floats2fvect" +#define CTYPES2UVECT scm_c_floats2fvect +#define UVECTTYPE scm_tc7_fvect +#define ARRAYTYPE scm_tc7_fvect +#define ARRAYTYPE_OPTIONAL scm_tc7_dvect +#define FLOATTYPE float +#define FLOATTYPE_OPTIONAL double #include "convert.i.c" -#define CTYPE double -#define SCM2CTYPES_FN "scm_c_scm2doubles" -#define SCM2CTYPES scm_c_scm2doubles -#define CTYPES2SCM_FN "scm_c_doubles2scm" -#define CTYPES2SCM scm_c_doubles2scm -#define CTYPES2UVECT_FN "scm_c_doubles2dvect" -#define CTYPES2UVECT scm_c_doubles2dvect -#define UVECTTYPE scm_tc7_dvect -#define ARRAYTYPE1 scm_tc7_dvect -#define ARRAYTYPE2 scm_tc7_fvect -#define FLOATTYPE1 double -#define FLOATTYPE2 float +#define CTYPE double +#define SIZEOF_CTYPE 0 +#define SCM2CTYPES_FN "scm_c_scm2doubles" +#define SCM2CTYPES scm_c_scm2doubles +#define CTYPES2SCM_FN "scm_c_doubles2scm" +#define CTYPES2SCM scm_c_doubles2scm +#define CTYPES2UVECT_FN "scm_c_doubles2dvect" +#define CTYPES2UVECT scm_c_doubles2dvect +#define UVECTTYPE scm_tc7_dvect +#define ARRAYTYPE scm_tc7_dvect +#define ARRAYTYPE_OPTIONAL scm_tc7_fvect +#define FLOATTYPE double +#define FLOATTYPE_OPTIONAL float #include "convert.i.c" /* diff --git a/libguile/convert.i.c b/libguile/convert.i.c index 7ab0eae25..80a0c30ff 100644 --- a/libguile/convert.i.c +++ b/libguile/convert.i.c @@ -5,8 +5,8 @@ /* Convert a vector, weak vector, (if possible string, substring), list - or uniform vector into an C array. If result array in argument 2 is - NULL, malloc() a new one. If out of memory, return NULL. */ + or uniform vector into an C array. If the result array in argument 2 + is NULL, malloc() a new one. If out of memory, return NULL. */ #define FUNC_NAME SCM2CTYPES_FN CTYPE * SCM2CTYPES (SCM obj, CTYPE *data) @@ -17,40 +17,58 @@ SCM2CTYPES (SCM obj, CTYPE *data) SCM_ASSERT (SCM_NIMP (obj) || SCM_NFALSEP (scm_list_p (obj)), obj, SCM_ARG1, FUNC_NAME); + /* list conversion */ if (SCM_NFALSEP (scm_list_p (obj))) { + /* traverse the given list and validate the range of each member */ SCM list = obj; for (n = 0; SCM_NFALSEP (scm_pair_p (list)); list = SCM_CDR (list), n++) { val = SCM_CAR (list); -#if defined (CTYPEMIN) && defined (CTYPEMAX) +#if SIZEOF_CTYPE && SIZEOF_CTYPE < SIZEOF_SCM_T_BITS + /* check integer ranges */ if (SCM_INUMP (val)) { - long v = SCM_INUM (val); - SCM_ASSERT_RANGE (SCM_ARG1, obj, v >= CTYPEMIN && v <= CTYPEMAX); + scm_t_signed_bits v = SCM_INUM (val); + CTYPE c = (CTYPE) v; + SCM_ASSERT_RANGE (SCM_ARG1, val, v != (scm_t_signed_bits) c); } - else -#elif defined (FLOATTYPE1) - if (!SCM_INUMP (val) && !(SCM_BIGP (val) || SCM_REALP (val))) + /* check big number ranges */ + else if (SCM_BIGP (val)) + { + scm_t_signed_bits v = scm_num2long (val, SCM_ARG1, FUNC_NAME); + CTYPE c = (CTYPE) v; + SCM_ASSERT_RANGE (SCM_ARG1, val, v != (scm_t_signed_bits) c); + } + else + /* check float types */ +#elif defined (FLOATTYPE) + /* real values, big numbers and immediate values are valid + for float conversions */ + if (!SCM_REALP (val) && !SCM_BIGP (val) && !SCM_INUMP (val)) #else - if (!SCM_INUMP (val) && !SCM_BIGP (val)) -#endif - SCM_WRONG_TYPE_ARG (SCM_ARG1, obj); + if (!SCM_BIGP (val) && !SCM_INUMP (val)) +#endif /* FLOATTYPE */ + SCM_WRONG_TYPE_ARG (SCM_ARG1, val); } + + /* allocate new memory if necessary */ if (data == NULL) - data = (CTYPE *) malloc (n * sizeof (CTYPE)); - if (data == NULL) - return NULL; + { + if ((data = (CTYPE *) malloc (n * sizeof (CTYPE))) == NULL) + return NULL; + } + /* traverse the list once more and convert each member */ list = obj; for (i = 0; SCM_NFALSEP (scm_pair_p (list)); list = SCM_CDR (list), i++) { val = SCM_CAR (list); if (SCM_INUMP (val)) - data[i] = SCM_INUM (val); + data[i] = (CTYPE) SCM_INUM (val); else if (SCM_BIGP (val)) data[i] = (CTYPE) scm_num2long (val, SCM_ARG1, FUNC_NAME); -#ifdef FLOATTYPE1 +#if defined (FLOATTYPE) else data[i] = (CTYPE) SCM_REAL_VALUE (val); #endif @@ -58,33 +76,52 @@ SCM2CTYPES (SCM obj, CTYPE *data) return data; } + /* other conversions */ switch (SCM_TYP7 (obj)) { + /* vectors and weak vectors */ case scm_tc7_vector: case scm_tc7_wvect: n = SCM_VECTOR_LENGTH (obj); + /* traverse the given vector and validate each member */ for (i = 0; i < n; i++) { val = SCM_VELTS (obj)[i]; - -#if defined (CTYPEMIN) && defined (CTYPEMAX) +#if SIZEOF_CTYPE && SIZEOF_CTYPE < SIZEOF_SCM_T_BITS + /* check integer ranges */ if (SCM_INUMP (val)) { - long v = SCM_INUM (val); - SCM_ASSERT_RANGE (SCM_ARG1, obj, v >= CTYPEMIN && v <= CTYPEMAX); + scm_t_signed_bits v = SCM_INUM (val); + CTYPE c = (CTYPE) v; + SCM_ASSERT_RANGE (SCM_ARG1, val, v != (scm_t_signed_bits) c); } + /* check big number ranges */ + else if (SCM_BIGP (val)) + { + scm_t_signed_bits v = scm_num2long (val, SCM_ARG1, FUNC_NAME); + CTYPE c = (CTYPE) v; + SCM_ASSERT_RANGE (SCM_ARG1, val, v != (scm_t_signed_bits) c); + } else -#elif defined (FLOATTYPE1) - if (!SCM_INUMP (val) && !(SCM_BIGP (val) || SCM_REALP (val))) + /* check float types */ +#elif defined (FLOATTYPE) + /* real values, big numbers and immediate values are valid + for float conversions */ + if (!SCM_REALP (val) && !SCM_BIGP (val) && !SCM_INUMP (val)) #else - if (!SCM_INUMP (val) && !SCM_BIGP (val)) -#endif - SCM_WRONG_TYPE_ARG (SCM_ARG1, obj); + if (!SCM_BIGP (val) && !SCM_INUMP (val)) +#endif /* FLOATTYPE */ + SCM_WRONG_TYPE_ARG (SCM_ARG1, val); } + + /* allocate new memory if necessary */ if (data == NULL) - data = (CTYPE *) malloc (n * sizeof (CTYPE)); - if (data == NULL) - return NULL; + { + if ((data = (CTYPE *) malloc (n * sizeof (CTYPE))) == NULL) + return NULL; + } + + /* traverse the vector once more and convert each member */ for (i = 0; i < n; i++) { val = SCM_VELTS (obj)[i]; @@ -92,7 +129,7 @@ SCM2CTYPES (SCM obj, CTYPE *data) data[i] = (CTYPE) SCM_INUM (val); else if (SCM_BIGP (val)) data[i] = (CTYPE) scm_num2long (val, SCM_ARG1, FUNC_NAME); -#ifdef FLOATTYPE1 +#if defined (FLOATTYPE) else data[i] = (CTYPE) SCM_REAL_VALUE (val); #endif @@ -100,37 +137,43 @@ SCM2CTYPES (SCM obj, CTYPE *data) break; #ifdef HAVE_ARRAYS - case ARRAYTYPE1: -#ifdef ARRAYTYPE2 - case ARRAYTYPE2: + /* array conversions (uniform vectors) */ + case ARRAYTYPE: +#ifdef ARRAYTYPE_OPTIONAL + case ARRAYTYPE_OPTIONAL: #endif n = SCM_UVECTOR_LENGTH (obj); + + /* allocate new memory if necessary */ if (data == NULL) - data = (CTYPE *) malloc (n * sizeof (CTYPE)); - if (data == NULL) - return NULL; -#ifdef FLOATTYPE2 - if (SCM_TYP7 (obj) == ARRAYTYPE2) + { + if ((data = (CTYPE *) malloc (n * sizeof (CTYPE))) == NULL) + return NULL; + } + +#ifdef FLOATTYPE_OPTIONAL + /* float <-> double conversions */ + if (SCM_TYP7 (obj) == ARRAYTYPE_OPTIONAL) { for (i = 0; i < n; i++) - data[i] = ((FLOATTYPE2 *) SCM_UVECTOR_BASE (obj))[i]; + data[i] = ((FLOATTYPE_OPTIONAL *) SCM_UVECTOR_BASE (obj))[i]; } else #endif + /* copy whole array */ memcpy (data, (CTYPE *) SCM_UVECTOR_BASE (obj), n * sizeof (CTYPE)); break; #endif /* HAVE_ARRAYS */ -#ifdef STRINGTYPE +#if SIZEOF_CTYPE == 1 case scm_tc7_string: n = SCM_STRING_LENGTH (obj); if (data == NULL) - data = (CTYPE *) malloc (n * sizeof (CTYPE)); - if (data == NULL) - return NULL; + if ((data = (CTYPE *) malloc (n * sizeof (CTYPE))) == NULL) + return NULL; memcpy (data, SCM_STRING_CHARS (obj), n * sizeof (CTYPE)); break; -#endif /* STRINGTYPE */ +#endif default: SCM_WRONG_TYPE_ARG (SCM_ARG1, obj); @@ -150,32 +193,34 @@ CTYPES2UVECT (const CTYPE *data, long n) { char *v; - SCM_ASSERT_RANGE (SCM_ARG2, scm_long2num (n), + SCM_ASSERT_RANGE (SCM_ARG2, scm_long2num (n), n > 0 && n <= SCM_UVECTOR_MAX_LENGTH); - v = scm_gc_malloc (sizeof (CTYPE) * n, "vector"); + v = scm_gc_malloc (n * sizeof (CTYPE), "uvect"); memcpy (v, data, n * sizeof (CTYPE)); return scm_alloc_cell (SCM_MAKE_UVECTOR_TAG (n, UVECTTYPE), (scm_t_bits) v); } #undef FUNC_NAME -#ifdef UVECTTYPE2 -#define FUNC_NAME CTYPES2UVECT_FN2 +#ifdef UVECTTYPE_OPTIONAL +#define FUNC_NAME CTYPES2UVECT_FN_OPTIONAL SCM -CTYPES2UVECT2 (const unsigned CTYPE *data, long n) +CTYPES2UVECT_OPTIONAL (const unsigned CTYPE *data, long n) { char *v; SCM_ASSERT_RANGE (SCM_ARG2, scm_long2num (n), n > 0 && n <= SCM_UVECTOR_MAX_LENGTH); - v = scm_gc_malloc (sizeof (unsigned CTYPE) * n, "vector"); + v = scm_gc_malloc (n * sizeof (unsigned CTYPE) * n, "uvect"); memcpy (v, data, n * sizeof (unsigned CTYPE)); - return scm_alloc_cell (SCM_MAKE_UVECTOR_TAG (n, UVECTTYPE2), (scm_t_bits) v); + return scm_alloc_cell (SCM_MAKE_UVECTOR_TAG (n, UVECTTYPE_OPTIONAL), + (scm_t_bits) v); } #undef FUNC_NAME -#endif /* UVECTTYPE2 */ +#endif /* UVECTTYPE_OPTIONAL */ #endif /* HAVE_ARRAYS */ + /* Converts a C array into a vector. */ #define FUNC_NAME CTYPES2SCM_FN SCM @@ -189,13 +234,10 @@ CTYPES2SCM (const CTYPE *data, long n) v = scm_c_make_vector (n, SCM_UNSPECIFIED); velts = SCM_VELTS (v); for (i = 0; i < n; i++) -#ifdef FLOATTYPE1 +#ifdef FLOATTYPE velts[i] = scm_make_real ((double) data[i]); -#elif defined (CTYPEFIXABLE) - velts[i] = SCM_MAKINUM (data[i]); #else - velts[i] = (SCM_FIXABLE (data[i]) ? SCM_MAKINUM (data[i]) : - scm_i_long2big (data[i])); + velts[i] = SCM_MAKINUM (data[i]); #endif return v; } @@ -209,33 +251,22 @@ CTYPES2SCM (const CTYPE *data, long n) #undef CTYPE #undef CTYPES2UVECT #undef CTYPES2UVECT_FN -#ifdef CTYPEFIXABLE -#undef CTYPEFIXABLE -#endif #undef UVECTTYPE -#ifdef UVECTTYPE2 -#undef CTYPES2UVECT2 -#undef CTYPES2UVECT_FN2 -#undef UVECTTYPE2 -#endif -#ifdef CTYPEMIN -#undef CTYPEMIN -#endif -#ifdef CTYPEMAX -#undef CTYPEMAX -#endif -#undef ARRAYTYPE1 -#ifdef ARRAYTYPE2 -#undef ARRAYTYPE2 +#ifdef UVECTTYPE_OPTIONAL +#undef CTYPES2UVECT_OPTIONAL +#undef CTYPES2UVECT_FN_OPTIONAL +#undef UVECTTYPE_OPTIONAL #endif -#ifdef FLOATTYPE1 -#undef FLOATTYPE1 +#undef SIZEOF_CTYPE +#undef ARRAYTYPE +#ifdef ARRAYTYPE_OPTIONAL +#undef ARRAYTYPE_OPTIONAL #endif -#ifdef FLOATTYPE2 -#undef FLOATTYPE2 +#ifdef FLOATTYPE +#undef FLOATTYPE #endif -#ifdef STRINGTYPE -#undef STRINGTYPE +#ifdef FLOATTYPE_OPTIONAL +#undef FLOATTYPE_OPTIONAL #endif /* diff --git a/libguile/deprecation.c b/libguile/deprecation.c index 17f3641dc..55a82aa4f 100644 --- a/libguile/deprecation.c +++ b/libguile/deprecation.c @@ -51,6 +51,11 @@ #include "libguile/strings.h" #include "libguile/ports.h" +/* Windows defines. */ +#ifdef __MINGW32__ +#define vsnprintf _vsnprintf +#endif + #if (SCM_ENABLE_DEPRECATED == 1) diff --git a/libguile/fports.c b/libguile/fports.c index e4e34700f..882405cec 100644 --- a/libguile/fports.c +++ b/libguile/fports.c @@ -69,7 +69,8 @@ size_t fwrite (); #include <errno.h> #include "libguile/iselect.h" -/* Some defines for Windows. */ + +/* Some defines for Windows (native port, not Cygwin). */ #ifdef __MINGW32__ # include <sys/stat.h> # include <winsock2.h> diff --git a/libguile/inet_aton.c b/libguile/inet_aton.c index f8e92541f..fe43d6eb2 100644 --- a/libguile/inet_aton.c +++ b/libguile/inet_aton.c @@ -39,6 +39,7 @@ static char sccsid[] = "@(#)inet_addr.c 8.1 (Berkeley) 6/17/93"; #include <ctype.h> #ifdef __MINGW32__ +/* Include for MinGW only. Cygwin will have the latter. */ #include <winsock2.h> #else #include <sys/param.h> |