diff --git a/src/xpdev/str_list.c b/src/xpdev/str_list.c index ff7379acd9478fd1a9eb224a59ae944062163799..208ac9b25f64c8f9500abf57821ae22af6ad7f73 100644 --- a/src/xpdev/str_list.c +++ b/src/xpdev/str_list.c @@ -49,7 +49,7 @@ str_list_t strListAlloc() return(list); } -size_t strListCount(str_list_t list) +size_t strListCount(const str_list_t list) { size_t i; @@ -62,7 +62,7 @@ size_t strListCount(str_list_t list) return(i); } -str_list_t strListAddAt(str_list_t* list, char* str, size_t count) +str_list_t strListAddAt(str_list_t* list, const char* str, size_t count) { str_list_t lp; @@ -80,11 +80,42 @@ str_list_t strListAddAt(str_list_t* list, char* str, size_t count) } -str_list_t strListAdd(str_list_t* list, char* str) +str_list_t strListAdd(str_list_t* list, const char* str) { return strListAddAt(list,str,strListCount(*list)); } +str_list_t strListSplit(str_list_t* list, char* str, const char* delimit) +{ + char* token; + + if(list==NULL) { + if((*list = strListAlloc())==NULL) + return(NULL); + } + + for(token = strtok(str, delimit); token!=NULL; token=strtok(NULL, delimit)) + strListAdd(list, token); + + return(*list); +} + +str_list_t strListSplitCopy(str_list_t* list, const char* str, const char* delimit) +{ + char* buf; + + if((buf=malloc(strlen(str)+1))==NULL) + return(NULL); + + strcpy(buf,str); + + *list = strListSplit(list,buf,delimit); + + free(buf); + + return(*list); +} + static int strListCompareAlpha(const void *arg1, const void *arg2) { return stricmp(*(char**)arg1, *(char**)arg2); diff --git a/src/xpdev/str_list.h b/src/xpdev/str_list.h index a538915826847efcb22f3a3643b33a3320ef14eb..bf657abf47dee8f20f3fb2cb37561c841a54fd69 100644 --- a/src/xpdev/str_list.h +++ b/src/xpdev/str_list.h @@ -54,13 +54,20 @@ void strListFree(str_list_t* list); /* Pass a pointer to a string list, the string to add */ /* Returns the updated list or NULL on error */ -str_list_t strListAdd(str_list_t* list, char* str); +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, char* str, size_t index); +str_list_t strListAddAt(str_list_t* list, const char* str, 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); + +/* Same as above, but copies str to temporary heap buffer first */ +str_list_t strListSplitCopy(str_list_t* list, const char* str, const char* delimit); /* Count the number of strings in the list and returns the count */ -size_t strListCount(str_list_t list); +size_t strListCount(const str_list_t list); void strListSortAlpha(str_list_t list); void strListSortAlphaReverse(str_list_t list);