diff --git a/src/xpdev/str_list.c b/src/xpdev/str_list.c index 454a2090f84a822043fcf6bcaabc27449fec763a..5bea0281abe6930a82c4c783c24f384c23c69ebf 100644 --- a/src/xpdev/str_list.c +++ b/src/xpdev/str_list.c @@ -85,17 +85,43 @@ static str_list_t str_list_insert(str_list_t* list, char* str, size_t index) str_list_t lp; count = strListCount(*list); + if(index > count) /* invalid index, do nothing */ + return(NULL); + + count++; if((lp=(str_list_t)realloc(*list,sizeof(char*)*(count+1)))==NULL) return(NULL); *list=lp; - for(i=index;i<=count;i++) - lp[i+1]=lp[i]; + for(i=count; i>index; i--) + lp[i]=lp[i-1]; lp[index]=str; return(lp); } +str_list_t strListRemove(str_list_t* list, size_t index) +{ + size_t i; + size_t count; + str_list_t lp; + + count = strListCount(*list); + if(index >= count) /* invalid index, do nothing */ + return(NULL); + + count--; + if((lp=(str_list_t)realloc(*list,sizeof(char*)*(count+1)))==NULL) + return(NULL); + + *list=lp; + for(i=index; i<count; i++) + lp[i]=lp[i+1]; + lp[count]=NULL; + + return(lp); +} + str_list_t strListAddAt(str_list_t* list, const char* str, size_t count) { char* buf; diff --git a/src/xpdev/str_list.h b/src/xpdev/str_list.h index d1d1f208d49662b354b44207d89d9f8f08a29f58..795a7bded2ad23f8f766a5ec04592521a2628199 100644 --- a/src/xpdev/str_list.h +++ b/src/xpdev/str_list.h @@ -55,22 +55,25 @@ void strListFree(str_list_t* list); /* Frees the strings in the list */ void strListFreeStrings(str_list_t list); -/* Pass a pointer to a string list, the string to add */ +/* Pass a pointer to a string list, the string to add (append) */ /* Returns the updated list or NULL on error */ str_list_t strListAdd(str_list_t* list, const char* str); /* Adds a string into the list at a specific index */ str_list_t strListAddAt(str_list_t* list, const char* str, size_t index); -/* Append a string list onto an another string list */ +/* Append a string list onto another string list */ str_list_t strListAddList(str_list_t* list, const str_list_t append_list); /* Inserts a string into the list at a specific index */ str_list_t strListInsert(str_list_t* list, const char* str, size_t index); -/* Insert a string list onto an another string list */ +/* Insert a string list into another string list */ str_list_t strListInsertList(str_list_t* list, const str_list_t append_list, size_t index); +/* Remove a string at a specific index */ +str_list_t strListRemove(str_list_t* list, size_t index); + /* Add to an exiting or new string list by splitting specified string (str) */ /* into multiple strings, separated by one of the delimit characters */ str_list_t strListSplit(str_list_t* list, char* str, const char* delimit);