diff options
author | goodale <goodale@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2005-12-13 15:41:43 +0000 |
---|---|---|
committer | goodale <goodale@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2005-12-13 15:41:43 +0000 |
commit | e27e0e6afb9ed8df2bb74a0c63c98dcef3559c1c (patch) | |
tree | 26097369e4de4732d6b66843645bbeb9eebc8cdd /src/util | |
parent | 60a9d3ed2ebfc4bec092911124000715983147fe (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.c | 59 |
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; + } } } |