From 0f91a65b3f8010446f32f59a5c996090ad7b2921 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Sun, 2 Jul 2000 16:54:08 +0200
Subject: [PATCH] Fixed bug with clear_svalues{,_undefined}().

Rev: src/svalue.c:1.79
Rev: src/svalue.h:1.58
---
 src/svalue.c | 12 +++++++-----
 src/svalue.h |  6 +++---
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/svalue.c b/src/svalue.c
index c7d386586f..660806f8a9 100644
--- a/src/svalue.c
+++ b/src/svalue.c
@@ -23,7 +23,7 @@
 #include "queue.h"
 #include "bignum.h"
 
-RCSID("$Id: svalue.c,v 1.78 2000/06/29 16:44:24 grubba Exp $");
+RCSID("$Id: svalue.c,v 1.79 2000/07/02 14:54:07 grubba Exp $");
 
 struct svalue dest_ob_zero = { T_INT, 0 };
 
@@ -1110,24 +1110,26 @@ void print_svalue (FILE *out, struct svalue *s)
   free (str.str);
 }
 
-void clear_svalues(struct svalue *s, size_t num)
+/* NOTE: Must handle num being negative. */
+void clear_svalues(struct svalue *s, ptrdiff_t num)
 {
   struct svalue dum;
   dum.type=T_INT;
   dum.subtype=NUMBER_NUMBER;
   dum.u.refs=0;
   dum.u.integer=0;
-  while(num--) *(s++)=dum;
+  while(num-- > 0) *(s++)=dum;
 }
 
-void clear_svalues_undefined(struct svalue *s, size_t num)
+/* NOTE: Must handle num being negative. */
+void clear_svalues_undefined(struct svalue *s, ptrdiff_t num)
 {
   struct svalue dum;
   dum.type=T_INT;
   dum.subtype=NUMBER_UNDEFINED;
   dum.u.refs=0;
   dum.u.integer=0;
-  while(num--) *(s++)=dum;
+  while(num-- > 0) *(s++)=dum;
 }
 
 void copy_svalues_recursively_no_free(struct svalue *to,
diff --git a/src/svalue.h b/src/svalue.h
index 2afcdceaf6..e1034e3d92 100644
--- a/src/svalue.h
+++ b/src/svalue.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: svalue.h,v 1.57 2000/06/29 16:44:24 grubba Exp $
+ * $Id: svalue.h,v 1.58 2000/07/02 14:54:08 grubba Exp $
  */
 #ifndef SVALUE_H
 #define SVALUE_H
@@ -366,8 +366,8 @@ int is_equal(struct svalue *a,struct svalue *b);
 int is_lt(struct svalue *a,struct svalue *b);
 void describe_svalue(struct svalue *s,int indent,struct processing *p);
 void print_svalue (FILE *out, struct svalue *s);
-void clear_svalues(struct svalue *s, size_t num);
-void clear_svalues_undefined(struct svalue *s, size_t num);
+void clear_svalues(struct svalue *s, ptrdiff_t num);
+void clear_svalues_undefined(struct svalue *s, ptrdiff_t num);
 void copy_svalues_recursively_no_free(struct svalue *to,
 				      struct svalue *from,
 				      size_t num,
-- 
GitLab