summaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorgoodale <goodale@17b73243-c579-4c4c-a9d2-2d5706c11dac>2005-12-13 15:41:43 +0000
committergoodale <goodale@17b73243-c579-4c4c-a9d2-2d5706c11dac>2005-12-13 15:41:43 +0000
commite27e0e6afb9ed8df2bb74a0c63c98dcef3559c1c (patch)
tree26097369e4de4732d6b66843645bbeb9eebc8cdd /src/util
parent60a9d3ed2ebfc4bec092911124000715983147fe (diff)
Patch from Erik Schnetter to track the capacity of the list and
produce an error if it is exceeded. git-svn-id: http://svn.cactuscode.org/flesh/trunk@4210 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src/util')
-rw-r--r--src/util/StringList.c59
1 files changed, 41 insertions, 18 deletions
diff --git a/src/util/StringList.c b/src/util/StringList.c
index 13d4df87..2634e17a 100644
--- a/src/util/StringList.c
+++ b/src/util/StringList.c
@@ -80,6 +80,7 @@ uStringList *Util_StringListCreate(int size)
this->current = NULL;
this->head = NULL;
+ this->max_size = size;
this->fill=0;
}
@@ -118,6 +119,7 @@ uStringList *Util_StringListCreate(int size)
1 - added
0 - duplicate
-1 - internal error
+ -2 - out of space
@endreturndesc
@@*/
int Util_StringListAdd(uStringList *list, const char *item)
@@ -128,11 +130,18 @@ int Util_StringListAdd(uStringList *list, const char *item)
if(list->fill == 0)
{
- list->head = list->list;
- list->head->string = Util_Strdup(item);
- list->head->next = NULL;
- list->fill++;
- retval = 1;
+ if (list->max_size < list->fill + 1)
+ {
+ retval = -2;
+ }
+ else
+ {
+ list->head = list->list;
+ list->head->string = Util_Strdup(item);
+ list->head->next = NULL;
+ list->fill++;
+ retval = 1;
+ }
}
else
{
@@ -142,19 +151,26 @@ int Util_StringListAdd(uStringList *list, const char *item)
{
if((position = Util_StrCmpi(item,this->string)) < 0)
{
- list->list[list->fill].string = Util_Strdup(item);
- list->list[list->fill].next = this;
- if(prev)
+ if (list->max_size < list->fill + 1)
{
- prev->next= &(list->list[list->fill]);
+ retval = -2;
}
else
{
- list->head=&(list->list[list->fill]);
+ list->list[list->fill].string = Util_Strdup(item);
+ list->list[list->fill].next = this;
+ if(prev)
+ {
+ prev->next= &(list->list[list->fill]);
+ }
+ else
+ {
+ list->head=&(list->list[list->fill]);
+ }
+
+ list->fill++;
+ retval = 1;
}
-
- list->fill++;
- retval = 1;
break;
}
else if (position == 0)
@@ -168,11 +184,18 @@ int Util_StringListAdd(uStringList *list, const char *item)
if(!this)
{
- list->list[list->fill].string = Util_Strdup(item);
- list->list[list->fill].next = NULL;
- prev->next=&(list->list[list->fill]);
- list->fill++;
- retval = 1;
+ if (list->max_size < list->fill + 1)
+ {
+ retval = -2;
+ }
+ else
+ {
+ list->list[list->fill].string = Util_Strdup(item);
+ list->list[list->fill].next = NULL;
+ prev->next=&(list->list[list->fill]);
+ list->fill++;
+ retval = 1;
+ }
}
}