Skip to content
Snippets Groups Projects
Commit 6371a00f authored by rswindell's avatar rswindell
Browse files

Created strListAlloc() to allocate and pre-terminate a string list.

Created strListAddAt() to add a string at a known index in the string list.
parent b87d76b0
No related branches found
No related tags found
No related merge requests found
...@@ -147,17 +147,16 @@ char** iniGetStringList(FILE* fp, const char* section, const char* key ...@@ -147,17 +147,16 @@ char** iniGetStringList(FILE* fp, const char* section, const char* key
SAFECOPY(list,value); SAFECOPY(list,value);
if((lp=malloc(sizeof(char*)))==NULL) if((lp=strListAlloc())==NULL)
return(NULL); return(NULL);
token=strtok(list,sep); token=strtok(list,sep);
while(token!=NULL) { while(token!=NULL) {
truncsp(token); truncsp(token);
if(strListAdd(&lp,token,items++)==NULL) if(strListAddAt(&lp,token,items++)==NULL)
break; break;
token=strtok(NULL,sep); token=strtok(NULL,sep);
} }
return(lp); return(lp);
} }
...@@ -194,11 +193,9 @@ char** iniGetSectionList(FILE* fp, const char* prefix) ...@@ -194,11 +193,9 @@ char** iniGetSectionList(FILE* fp, const char* prefix)
char str[INI_MAX_LINE_LEN]; char str[INI_MAX_LINE_LEN];
ulong items=0; ulong items=0;
if((lp=malloc(sizeof(char*)))==NULL) if((lp=strListAlloc())==NULL)
return(NULL); return(NULL);
*lp=NULL;
if(fp==NULL) if(fp==NULL)
return(lp); return(lp);
...@@ -219,7 +216,7 @@ char** iniGetSectionList(FILE* fp, const char* prefix) ...@@ -219,7 +216,7 @@ char** iniGetSectionList(FILE* fp, const char* prefix)
if(prefix!=NULL) if(prefix!=NULL)
if(strnicmp(p,prefix,strlen(prefix))!=0) if(strnicmp(p,prefix,strlen(prefix))!=0)
continue; continue;
if(strListAdd(&lp,p,items++)==NULL) if(strListAddAt(&lp,p,items++)==NULL)
break; break;
} }
...@@ -234,11 +231,9 @@ char** iniGetKeyList(FILE* fp, const char* section) ...@@ -234,11 +231,9 @@ char** iniGetKeyList(FILE* fp, const char* section)
char str[INI_MAX_LINE_LEN]; char str[INI_MAX_LINE_LEN];
ulong items=0; ulong items=0;
if((lp=malloc(sizeof(char*)))==NULL) if((lp=strListAlloc())==NULL)
return(NULL); return(NULL);
*lp=NULL;
if(fp==NULL) if(fp==NULL)
return(lp); return(lp);
...@@ -261,7 +256,7 @@ char** iniGetKeyList(FILE* fp, const char* section) ...@@ -261,7 +256,7 @@ char** iniGetKeyList(FILE* fp, const char* section)
continue; continue;
*tp=0; *tp=0;
truncsp(p); truncsp(p);
if(strListAdd(&lp,p,items++)==NULL) if(strListAddAt(&lp,p,items++)==NULL)
break; break;
} }
......
...@@ -38,6 +38,17 @@ ...@@ -38,6 +38,17 @@
#include <stdlib.h> /* malloc */ #include <stdlib.h> /* malloc */
#include "str_list.h" #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 strListCount(char** list)
{ {
size_t i; size_t i;
...@@ -51,13 +62,10 @@ size_t strListCount(char** list) ...@@ -51,13 +62,10 @@ size_t strListCount(char** list)
return(i); return(i);
} }
char** strListAdd(char*** list, char* str, size_t count) char** strListAddAt(char*** list, char* str, size_t count)
{ {
char** lp; char** lp;
if(!count)
count=strListCount(*list);
if((lp=realloc(*list,sizeof(char*)*(count+2)))==NULL) if((lp=realloc(*list,sizeof(char*)*(count+2)))==NULL)
return(NULL); return(NULL);
...@@ -71,6 +79,12 @@ char** strListAdd(char*** list, char* str, size_t count) ...@@ -71,6 +79,12 @@ char** strListAdd(char*** list, char* str, size_t count)
return(lp); return(lp);
} }
char** strListAdd(char*** list, char* str)
{
return strListAddAt(list,str,strListCount(*list));
}
void strListFree(char*** list) void strListFree(char*** list)
{ {
size_t i; size_t i;
......
...@@ -44,17 +44,22 @@ ...@@ -44,17 +44,22 @@
extern "C" { extern "C" {
#endif #endif
/* Pass a pointer to a string list, the string to add, and the current list count if known */ /* Returns an allocated and terminated string list */
/* (or 0 if unknown) */ 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 */ /* 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 */ /* Count the number of strings in the list and returns the count */
size_t strListCount(char** list); size_t strListCount(char** list);
/* Frees the strings in the list (and the list itself) */
void strListFree(char*** list);
#if defined(__cplusplus) #if defined(__cplusplus)
} }
#endif #endif
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment