summaryrefslogtreecommitdiff
path: root/srfi/srfi-14.c
diff options
context:
space:
mode:
authorGary Houston <ghouston@arglist.com>2001-07-15 18:54:28 +0000
committerGary Houston <ghouston@arglist.com>2001-07-15 18:54:28 +0000
commitb87f5a839490236ce76deb873e81cdec9a477269 (patch)
treeb3f9e74accc1f42f7e15df952b237bb3e01f5fc0 /srfi/srfi-14.c
parent396f36cdbfe40800a6aeacbdf3ceca7ddbd1a962 (diff)
downloadguile-b87f5a839490236ce76deb873e81cdec9a477269.tar.gz
(scm_char_set_hash): bug fix: was overrunning the buffer and
calculating based on garbage. (scm_char_set_eq, scm_char_set_leq): fix argument number in error reporting: wasn't incremented due to macro coding. (scm_char_set): report argument number in error reporting: was hard coded to 1. remove a couple of local variables.
Diffstat (limited to 'srfi/srfi-14.c')
-rw-r--r--srfi/srfi-14.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/srfi/srfi-14.c b/srfi/srfi-14.c
index e3fbbcc1e..685ee89bc 100644
--- a/srfi/srfi-14.c
+++ b/srfi/srfi-14.c
@@ -126,7 +126,8 @@ SCM_DEFINE (scm_char_set_eq, "char-set=", 0, 0, 1,
SCM csi = SCM_CAR (char_sets);
long *csi_data;
- SCM_VALIDATE_SMOB (argnum++, csi, charset);
+ SCM_VALIDATE_SMOB (argnum, csi, charset);
+ argnum++;
csi_data = (long *) SCM_SMOB_DATA (csi);
if (cs1_data == NULL)
cs1_data = csi_data;
@@ -155,7 +156,8 @@ SCM_DEFINE (scm_char_set_leq, "char-set<=", 0, 0, 1,
SCM csi = SCM_CAR (char_sets);
long *csi_data;
- SCM_VALIDATE_SMOB (argnum++, csi, charset);
+ SCM_VALIDATE_SMOB (argnum, csi, charset);
+ argnum++;
csi_data = (long *) SCM_SMOB_DATA (csi);
if (prev_data)
{
@@ -200,7 +202,7 @@ SCM_DEFINE (scm_char_set_hash, "char-set-hash", 1, 1, 0,
}
p = (long *) SCM_SMOB_DATA (cs);
- for (k = 0; k < SCM_CHARSET_SIZE - 1; k++)
+ for (k = 0; k < SCM_CHARSET_SIZE / sizeof (long); k++)
{
val = p[k] ^ val;
}
@@ -458,21 +460,20 @@ SCM_DEFINE (scm_char_set, "char-set", 0, 0, 1,
"Return a character set containing all given characters.")
#define FUNC_NAME s_scm_char_set
{
- SCM cs, ls;
+ SCM cs;
long * p;
+ int argnum = 1;
SCM_VALIDATE_REST_ARGUMENT (rest);
- ls = rest;
cs = make_char_set (FUNC_NAME);
p = (long *) SCM_SMOB_DATA (cs);
- while (!SCM_NULLP (ls))
+ while (!SCM_NULLP (rest))
{
- SCM chr = SCM_CAR (ls);
int c;
- SCM_VALIDATE_CHAR_COPY (1, chr, c);
- ls = SCM_CDR (ls);
-
+ SCM_VALIDATE_CHAR_COPY (argnum, SCM_CAR (rest), c);
+ argnum++;
+ rest = SCM_CDR (rest);
p[c / sizeof (long)] |= 1 << (c % sizeof (long));
}
return cs;