From 2b2762b89b20a66b8429a2fe8f9a196134f31761 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Thu, 27 May 2004 09:17:06 +0000 Subject: [PATCH] Created strListInsert() and strListInsertList(). --- src/xpdev/str_list.c | 55 +++++++++++++++++++++++++++++++++++++------- src/xpdev/str_list.h | 10 ++++++-- 2 files changed, 55 insertions(+), 10 deletions(-) diff --git a/src/xpdev/str_list.c b/src/xpdev/str_list.c index 9dbd9c9265..454a2090f8 100644 --- a/src/xpdev/str_list.c +++ b/src/xpdev/str_list.c @@ -64,16 +64,34 @@ size_t strListCount(const str_list_t list) return(i); } -static str_list_t str_list_add_at(str_list_t* list, char* str, size_t count) +static str_list_t str_list_append(str_list_t* list, char* str, size_t index) { str_list_t lp; - if((lp=(str_list_t)realloc(*list,sizeof(char*)*(count+2)))==NULL) + if((lp=(str_list_t)realloc(*list,sizeof(char*)*(index+2)))==NULL) return(NULL); *list=lp; - lp[count++]=str; - lp[count]=NULL; /* terminate list */ + lp[index++]=str; + lp[index]=NULL; /* terminate list */ + + return(lp); +} + +static str_list_t str_list_insert(str_list_t* list, char* str, size_t index) +{ + size_t i; + size_t count; + str_list_t lp; + + count = strListCount(*list); + 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]; + lp[index]=str; return(lp); } @@ -87,16 +105,15 @@ str_list_t strListAddAt(str_list_t* list, const char* str, size_t count) strcpy(buf,str); - return(str_list_add_at(list,buf,count)); + return(str_list_append(list,buf,count)); } - str_list_t strListAdd(str_list_t* list, const char* str) { return strListAddAt(list,str,strListCount(*list)); } -str_list_t strListAddList(str_list_t* list, str_list_t add_list) +str_list_t strListAddList(str_list_t* list, const str_list_t add_list) { size_t i,j; @@ -107,6 +124,28 @@ str_list_t strListAddList(str_list_t* list, str_list_t add_list) return(*list); } +str_list_t strListInsert(str_list_t* list, const char* str, size_t index) +{ + char* buf; + + if((buf=(char*)malloc(strlen(str)+1))==NULL) + return(NULL); + + strcpy(buf,str); + + return(str_list_insert(list,buf,index)); +} + +str_list_t strListInsertList(str_list_t* list, const str_list_t add_list, size_t index) +{ + size_t i; + + for(i=0;add_list[i];i++) + strListInsert(list,add_list[i],index++); + + return(*list); +} + str_list_t strListSplit(str_list_t* list, char* str, const char* delimit) { char* token; @@ -144,7 +183,7 @@ str_list_t strListMerge(str_list_t* list, str_list_t add_list) j=strListCount(*list); for(i=0;add_list[i];i++) - str_list_add_at(list,add_list[i],j++); + str_list_append(list,add_list[i],j++); return(*list); } diff --git a/src/xpdev/str_list.h b/src/xpdev/str_list.h index afbc044b77..d1d1f208d4 100644 --- a/src/xpdev/str_list.h +++ b/src/xpdev/str_list.h @@ -62,8 +62,14 @@ 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 */ -str_list_t strListAddList(str_list_t* list, str_list_t append_list); +/* Append a string list onto an 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 */ +str_list_t strListInsertList(str_list_t* list, const str_list_t append_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 */ -- GitLab