summaryrefslogtreecommitdiff
path: root/dc/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'dc/array.c')
-rw-r--r--dc/array.c44
1 files changed, 25 insertions, 19 deletions
diff --git a/dc/array.c b/dc/array.c
index d97f716..573e8e3 100644
--- a/dc/array.c
+++ b/dc/array.c
@@ -1,11 +1,12 @@
-/*
+/*
* implement arrays for dc
*
- * Copyright (C) 1994, 1997, 1998 Free Software Foundation, Inc.
+ * Copyright (C) 1994, 1997, 1998, 2000, 2006, 2008
+ * Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
+ * the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
@@ -14,12 +15,8 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, you can either send email to this
- * program's author (see below) or write to:
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
- * The Free Software Foundation, Inc.
- * 59 Temple Place, Suite 330
- * Boston, MA 02111 USA
*/
/* This module is the only one that knows what arrays look like. */
@@ -58,15 +55,14 @@ dc_array_set DC_DECLARG((array_id, Index, value))
dc_data value DC_DECLEND
{
struct dc_array *cur;
- struct dc_array *prev=NULL;
- struct dc_array *newentry;
+ struct dc_array *prev = NULL;
cur = dc_get_stacked_array(array_id);
- while (cur && cur->Index < Index){
+ while (cur != NULL && cur->Index < Index){
prev = cur;
cur = cur->next;
}
- if (cur && cur->Index == Index){
+ if (cur != NULL && cur->Index == Index){
if (cur->value.dc_type == DC_NUMBER)
dc_free_num(&cur->value.v.number);
else if (cur->value.dc_type == DC_STRING)
@@ -75,11 +71,11 @@ dc_array_set DC_DECLARG((array_id, Index, value))
dc_garbage(" in array", array_id);
cur->value = value;
}else{
- newentry = dc_malloc(sizeof *newentry);
+ struct dc_array *newentry = dc_malloc(sizeof *newentry);
newentry->Index = Index;
newentry->value = value;
newentry->next = cur;
- if (prev)
+ if (prev != NULL)
prev->next = newentry;
else
dc_set_stacked_array(array_id, newentry);
@@ -93,11 +89,12 @@ dc_array_get DC_DECLARG((array_id, Index))
int array_id DC_DECLSEP
int Index DC_DECLEND
{
- struct dc_array *cur;
+ struct dc_array *cur = dc_get_stacked_array(array_id);
- for (cur=dc_get_stacked_array(array_id); cur; cur=cur->next)
- if (cur->Index == Index)
- return dc_dup(cur->value);
+ while (cur != NULL && cur->Index < Index)
+ cur = cur->next;
+ if (cur !=NULL && cur->Index == Index)
+ return dc_dup(cur->value);
return dc_int2data(0);
}
@@ -109,7 +106,7 @@ dc_array_free DC_DECLARG((a_head))
struct dc_array *cur;
struct dc_array *next;
- for (cur=a_head; cur; cur=next) {
+ for (cur=a_head; cur!=NULL; cur=next) {
next = cur->next;
if (cur->value.dc_type == DC_NUMBER)
dc_free_num(&cur->value.v.number);
@@ -120,3 +117,12 @@ dc_array_free DC_DECLARG((a_head))
free(cur);
}
}
+
+
+/*
+ * Local Variables:
+ * mode: C
+ * tab-width: 4
+ * End:
+ * vi: set ts=4 :
+ */