summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Jahn <stefan@lkcc.org>2002-02-27 15:41:01 +0000
committerStefan Jahn <stefan@lkcc.org>2002-02-27 15:41:01 +0000
commitedb810bb84ca1198d4ff34712877ee681b15c5fb (patch)
treefcad43dec94868a53aede4540d0853ede131ea4a
parentd51b42e28b4135545b5e5932b5a55210328fa706 (diff)
downloadguile-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--ChangeLog4
-rw-r--r--Makefile.am2
-rw-r--r--doc/ref/ChangeLog5
-rw-r--r--doc/ref/gh.texi14
-rw-r--r--guile-readline/ChangeLog5
-rw-r--r--guile-readline/Makefile.am2
-rw-r--r--libguile/ChangeLog9
-rw-r--r--libguile/convert.c145
-rw-r--r--libguile/convert.i.c189
-rw-r--r--libguile/deprecation.c5
-rw-r--r--libguile/fports.c3
-rw-r--r--libguile/inet_aton.c1
12 files changed, 222 insertions, 162 deletions
diff --git a/ChangeLog b/ChangeLog
index 213103986..b0c352451 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>