From 6371a00f903e77c1fa27155d36972bfc3d6d91bc Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Tue, 11 May 2004 17:29:44 +0000 Subject: [PATCH] Created strListAlloc() to allocate and pre-terminate a string list. Created strListAddAt() to add a string at a known index in the string list. --- src/xpdev/ini_file.c | 17 ++++++----------- src/xpdev/str_list.c | 22 ++++++++++++++++++---- src/xpdev/str_list.h | 17 +++++++++++------ 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/xpdev/ini_file.c b/src/xpdev/ini_file.c index d8a7805092..e85f0536b0 100644 --- a/src/xpdev/ini_file.c +++ b/src/xpdev/ini_file.c @@ -147,17 +147,16 @@ char** iniGetStringList(FILE* fp, const char* section, const char* key SAFECOPY(list,value); - if((lp=malloc(sizeof(char*)))==NULL) + if((lp=strListAlloc())==NULL) return(NULL); token=strtok(list,sep); while(token!=NULL) { truncsp(token); - if(strListAdd(&lp,token,items++)==NULL) + if(strListAddAt(&lp,token,items++)==NULL) break; token=strtok(NULL,sep); } - return(lp); } @@ -194,11 +193,9 @@ char** iniGetSectionList(FILE* fp, const char* prefix) char str[INI_MAX_LINE_LEN]; ulong items=0; - if((lp=malloc(sizeof(char*)))==NULL) + if((lp=strListAlloc())==NULL) return(NULL); - *lp=NULL; - if(fp==NULL) return(lp); @@ -219,7 +216,7 @@ char** iniGetSectionList(FILE* fp, const char* prefix) if(prefix!=NULL) if(strnicmp(p,prefix,strlen(prefix))!=0) continue; - if(strListAdd(&lp,p,items++)==NULL) + if(strListAddAt(&lp,p,items++)==NULL) break; } @@ -234,11 +231,9 @@ char** iniGetKeyList(FILE* fp, const char* section) char str[INI_MAX_LINE_LEN]; ulong items=0; - if((lp=malloc(sizeof(char*)))==NULL) + if((lp=strListAlloc())==NULL) return(NULL); - *lp=NULL; - if(fp==NULL) return(lp); @@ -261,7 +256,7 @@ char** iniGetKeyList(FILE* fp, const char* section) continue; *tp=0; truncsp(p); - if(strListAdd(&lp,p,items++)==NULL) + if(strListAddAt(&lp,p,items++)==NULL) break; } diff --git a/src/xpdev/str_list.c b/src/xpdev/str_list.c index 5551726fe0..eb6de29507 100644 --- a/src/xpdev/str_list.c +++ b/src/xpdev/str_list.c @@ -38,6 +38,17 @@ #include <stdlib.h> /* malloc */ #include "str_list.h" +char** strListAlloc() +{ + char** list; + + if((list=malloc(sizeof(char*)))==NULL) + return(NULL); + + list[0]=NULL; /* terminated by default */ + return(list); +} + size_t strListCount(char** list) { size_t i; @@ -51,13 +62,10 @@ size_t strListCount(char** list) return(i); } -char** strListAdd(char*** list, char* str, size_t count) +char** strListAddAt(char*** list, char* str, size_t count) { char** lp; - if(!count) - count=strListCount(*list); - if((lp=realloc(*list,sizeof(char*)*(count+2)))==NULL) return(NULL); @@ -71,6 +79,12 @@ char** strListAdd(char*** list, char* str, size_t count) return(lp); } + +char** strListAdd(char*** list, char* str) +{ + return strListAddAt(list,str,strListCount(*list)); +} + void strListFree(char*** list) { size_t i; diff --git a/src/xpdev/str_list.h b/src/xpdev/str_list.h index 351aa78d1d..b7e7c929ba 100644 --- a/src/xpdev/str_list.h +++ b/src/xpdev/str_list.h @@ -44,17 +44,22 @@ extern "C" { #endif -/* Pass a pointer to a string list, the string to add, and the current list count if known */ -/* (or 0 if unknown) */ +/* Returns an allocated and terminated string list */ +char** strListAlloc(void); + +/* Frees the strings in the list (and the list itself) */ +void strListFree(char*** list); + +/* Pass a pointer to a string list, the string to add */ /* Returns the updated list or NULL on error */ -char** strListAdd(char*** list, char* str, size_t count); +char** strListAdd(char*** list, char* str); + +/* Adds a string into the list at a specific index */ +char** strListAddAt(char*** list, char* str, size_t index); /* Count the number of strings in the list and returns the count */ size_t strListCount(char** list); -/* Frees the strings in the list (and the list itself) */ -void strListFree(char*** list); - #if defined(__cplusplus) } #endif -- GitLab