diff --git a/src/xpdev/ini_file.c b/src/xpdev/ini_file.c index 11592b22326f5797eef9e5f1824e4cacc3af6a61..14ee5cda1cdeebb0d30c93e0df673e764acfc28e 100644 --- a/src/xpdev/ini_file.c +++ b/src/xpdev/ini_file.c @@ -39,6 +39,7 @@ #include <string.h> /* strlen */ #include <ctype.h> /* isdigit */ #include "sockwrap.h" /* inet_addr */ +#include "filewrap.h" /* chsize */ #include "ini_file.h" #define INI_MAX_LINE_LEN 256 /* Maximum length of entire line, includes '\0' */ @@ -152,7 +153,7 @@ str_list_t iniGetStringList(FILE* fp, const char* section, const char* key token=strtok(list,sep); while(token!=NULL) { truncsp(token); - if(strListAddAt(&lp,token,items++)==NULL) + if(strListAdd(&lp,token,items++)==NULL) break; token=strtok(NULL,sep); } @@ -215,7 +216,7 @@ str_list_t iniGetSectionList(FILE* fp, const char* prefix) if(prefix!=NULL) if(strnicmp(p,prefix,strlen(prefix))!=0) continue; - if(strListAddAt(&lp,p,items++)==NULL) + if(strListAdd(&lp,p,items++)==NULL) break; } @@ -255,7 +256,7 @@ str_list_t iniGetKeyList(FILE* fp, const char* section) continue; *tp=0; truncsp(p); - if(strListAddAt(&lp,p,items++)==NULL) + if(strListAdd(&lp,p,items++)==NULL) break; } @@ -433,3 +434,27 @@ ulong iniGetBitField(FILE* fp, const char* section, const char* key, return(v); } + +str_list_t iniReadFile(FILE* fp) +{ + size_t i; + str_list_t list; + + rewind(fp); + + list = strListReadFile(fp, NULL, INI_MAX_VALUE_LEN); + if(list!=NULL) { + /* truncate the white-space off end of strings */ + for(i=0; list[i]!=NULL; i++) + truncsp(list[i]); + } + + return(list); +} + +BOOL iniWriteFile(FILE* fp, const str_list_t list) +{ + rewind(fp); + chsize(fileno(fp),0); /* truncate */ + return(strListWriteFile(fp,list,"\n") == strListCount(list)); +} diff --git a/src/xpdev/ini_file.h b/src/xpdev/ini_file.h index d438b75f4f37d155467a9d301776878f3b398561..fcc452e69dca840b5af4cc4f4de5d54a00bc41ff 100644 --- a/src/xpdev/ini_file.h +++ b/src/xpdev/ini_file.h @@ -85,6 +85,12 @@ void* iniFreeStringList(str_list_t list); /* Free named string list returned from iniGetNamedStringList */ void* iniFreeNamedStringList(named_string_t** list); + +/* File I/O Functions */ +str_list_t iniReadFile(FILE* fp); +BOOL iniWriteFile(FILE* fp, const str_list_t list); + + #if defined(__cplusplus) } #endif diff --git a/src/xpdev/str_list.c b/src/xpdev/str_list.c index dc6fd9203ce811b1e3e9063c170c2054acc0a874..ba8baf8dccb09df8eaf56baee7d4b83f8f6cf943 100644 --- a/src/xpdev/str_list.c +++ b/src/xpdev/str_list.c @@ -122,7 +122,7 @@ str_list_t strListRemove(str_list_t* list, size_t index) return(lp); } -str_list_t strListAddAt(str_list_t* list, const char* str, size_t count) +str_list_t strListAdd(str_list_t* list, const char* str, size_t index) { char* buf; @@ -131,12 +131,10 @@ str_list_t strListAddAt(str_list_t* list, const char* str, size_t count) strcpy(buf,str); - return(str_list_append(list,buf,count)); -} + if(index==0) + index=strListCount(*list); -str_list_t strListAdd(str_list_t* list, const char* str) -{ - return strListAddAt(list,str,strListCount(*list)); + return(str_list_append(list,buf,index)); } str_list_t strListAddList(str_list_t* list, const str_list_t add_list) @@ -146,7 +144,7 @@ str_list_t strListAddList(str_list_t* list, const str_list_t add_list) count=strListCount(*list); for(i=0; add_list[i]!=NULL; i++) - strListAddAt(list,add_list[i],count++); + strListAdd(list,add_list[i],count++); return(*list); } @@ -183,7 +181,7 @@ str_list_t strListSplit(str_list_t* list, char* str, const char* delimit) } for(token = strtok(str, delimit); token!=NULL; token=strtok(NULL, delimit)) - strListAdd(list, token); + strListAdd(list, token, 0); return(*list); } @@ -294,7 +292,7 @@ str_list_t strListReadFile(FILE* fp, str_list_t* list, size_t max_line_len) while(!feof(fp)) { if(fgets(buf,max_line_len+1,fp)==NULL) break; - strListAddAt(list, buf, count++); + strListAdd(list, buf, count++); } free(buf); @@ -312,7 +310,7 @@ size_t strListWriteFile(FILE* fp, const str_list_t list, const char* separator) for(i=0; list[i]!=NULL; i++) { if(fputs(list[i],fp)==EOF) break; - if(seperator!=NULL && fputs(seperator,fp)==EOF) + if(separator!=NULL && fputs(separator,fp)==EOF) break; } diff --git a/src/xpdev/str_list.h b/src/xpdev/str_list.h index 2a993dd0e20230b2d32b6ebc0f68d6c9e95f8cf2..3c5ac129108a3d7210e8007e7997c5112b4f272a 100644 --- a/src/xpdev/str_list.h +++ b/src/xpdev/str_list.h @@ -57,10 +57,7 @@ void strListFreeStrings(str_list_t list); /* 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); +str_list_t strListAdd(str_list_t* list, const char* str, size_t index); /* Append a string list onto another string list */ str_list_t strListAddList(str_list_t* list, const str_list_t append_list);