aboutsummaryrefslogtreecommitdiffstats
path: root/array.c
diff options
context:
space:
mode:
authorJari Aalto <jari.aalto@cante.net>2005-12-07 14:08:12 +0000
committerJari Aalto <jari.aalto@cante.net>2009-09-12 16:46:57 +0000
commit95732b497d12c98613bb3c5db16b61f377501a59 (patch)
tree5e1cdf79eb0407e09dca4c0ec29e11442c7d1d15 /array.c
parenteb87367179effbe5f430236db8259006d71438b7 (diff)
downloadandroid_external_bash-95732b497d12c98613bb3c5db16b61f377501a59.tar.gz
android_external_bash-95732b497d12c98613bb3c5db16b61f377501a59.tar.bz2
android_external_bash-95732b497d12c98613bb3c5db16b61f377501a59.zip
Imported from ../bash-3.1.tar.gz.
Diffstat (limited to 'array.c')
-rw-r--r--array.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/array.c b/array.c
index bfc83c3..c32b613 100644
--- a/array.c
+++ b/array.c
@@ -107,7 +107,7 @@ ARRAY *a;
ARRAY *a1;
ARRAY_ELEMENT *ae, *new;
- if (!a)
+ if (a == 0)
return((ARRAY *) NULL);
a1 = array_create();
a1->type = a->type;
@@ -243,9 +243,9 @@ char *s;
{
register ARRAY_ELEMENT *ae, *new;
- if (a == 0)
+ if (a == 0 || (array_empty(a) && s == 0))
return 0;
- if (n <= 0)
+ else if (n <= 0)
return (a->num_elements);
ae = element_forw(a->head);
@@ -253,16 +253,18 @@ char *s;
new = array_create_element(0, s);
ADD_BEFORE(ae, new);
a->num_elements++;
+ if (array_num_elements(a) == 1) /* array was empty */
+ return 1;
}
- a->max_index += n;
-
/*
* Renumber all elements in the array except the one we just added.
*/
for ( ; ae != a->head; ae = element_forw(ae))
element_index(ae) += n;
+ a->max_index = element_index(a->head->prev);
+
return (a->num_elements);
}
@@ -288,7 +290,7 @@ ARRAY *array;
ARRAY_ELEMENT *a;
char *t;
- if (array == 0 || array->head == 0 || array_empty (array))
+ if (array == 0 || array_head(array) == 0 || array_empty(array))
return (ARRAY *)NULL;
for (a = element_forw(array->head); a != array->head; a = element_forw(a)) {
t = quote_string (a->value);
@@ -313,7 +315,7 @@ int starsub, quoted;
arrayind_t i;
char *ifs, sep[2];
- p = array_head (a);
+ p = a ? array_head (a) : 0;
if (p == 0 || array_empty (a) || start > array_max_index(a))
return ((char *)NULL);
@@ -354,10 +356,10 @@ int mflags;
ARRAY_ELEMENT *e;
char *t, *ifs, sifs[2];
- if (array_head (a) == 0 || array_empty (a))
+ if (a == 0 || array_head(a) == 0 || array_empty(a))
return ((char *)NULL);
- a2 = array_copy (a);
+ a2 = array_copy(a);
for (e = element_forw(a2->head); e != a2->head; e = element_forw(e)) {
t = pat_subst(element_value(e), pat, rep, mflags);
FREE(element_value(e));
@@ -427,7 +429,7 @@ char *v;
{
register ARRAY_ELEMENT *new, *ae;
- if (!a)
+ if (a == 0)
return(-1);
new = array_create_element(i, v);
if (i > array_max_index(a)) {
@@ -473,7 +475,7 @@ arrayind_t i;
{
register ARRAY_ELEMENT *ae;
- if (!a || array_empty(a))
+ if (a == 0 || array_empty(a))
return((ARRAY_ELEMENT *) NULL);
for (ae = element_forw(a->head); ae != a->head; ae = element_forw(ae))
if (element_index(ae) == i) {