X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/641204dfbdb9fc870cdd2e7f9e3169a44693e7bf..e02bdbcbe32883818ff31548917ef6df9f7a0e9d:/stglibs/dotconfpp.lib/dotconfpp.cpp?ds=sidebyside diff --git a/stglibs/dotconfpp.lib/dotconfpp.cpp b/stglibs/dotconfpp.lib/dotconfpp.cpp index b82ae818..caf5a590 100644 --- a/stglibs/dotconfpp.lib/dotconfpp.cpp +++ b/stglibs/dotconfpp.lib/dotconfpp.cpp @@ -19,7 +19,8 @@ #include // glob #include -#include "dotconfpp.h" +#include "stg/dotconfpp.h" +#include "mempool.h" DOTCONFDocumentNode::DOTCONFDocumentNode():previousNode(NULL), nextNode(NULL), parentNode(NULL), childNode(NULL), values(NULL), valuesCount(0), @@ -70,13 +71,13 @@ DOTCONFDocument::DOTCONFDocument(DOTCONFDocument::CaseSensitive caseSensitivity) DOTCONFDocument::~DOTCONFDocument() { - for(std::list::iterator i = nodeTree.begin(); i != nodeTree.end(); i++){ + for(std::list::iterator i = nodeTree.begin(); i != nodeTree.end(); ++i){ delete(*i); } - for(std::list::iterator i = requiredOptions.begin(); i != requiredOptions.end(); i++){ + for(std::list::iterator i = requiredOptions.begin(); i != requiredOptions.end(); ++i){ free(*i); } - for(std::list::iterator i = processedFiles.begin(); i != processedFiles.end(); i++){ + for(std::list::iterator i = processedFiles.begin(); i != processedFiles.end(); ++i){ free(*i); } free(fileName); @@ -187,7 +188,7 @@ int DOTCONFDocument::parseLine() DOTCONFDocumentNode * tagNode = NULL; bool newNode = false; - for(std::list::iterator i = words.begin(); i != words.end(); i++) { + for(std::list::iterator i = words.begin(); i != words.end(); ++i) { word = *i; if(*word == '<'){ @@ -216,7 +217,7 @@ int DOTCONFDocument::parseLine() } else { //closing tag nodeName+=2; std::list::reverse_iterator i=nodeTree.rbegin(); - for(; i!=nodeTree.rend(); i++){ + for(; i!=nodeTree.rend(); ++i){ if(!cmp_func(nodeName, (*i)->name) && !(*i)->closed){ (*i)->closed = true; curParent = (*i)->parentNode; @@ -269,11 +270,10 @@ int DOTCONFDocument::parseFile(DOTCONFDocumentNode * _parent) curParent = _parent; quoted = false; - size_t slen = 0; while(fgets(str, 511, file)){ curLine++; - slen = strlen(str); + size_t slen = strlen(str); if( slen >= 510 ){ error(curLine, fileName, "warning: line too long"); } @@ -303,16 +303,14 @@ int DOTCONFDocument::checkConfig(const std::list::iterator { int ret = 0; - DOTCONFDocumentNode * tagNode = NULL; - int vi = 0; - for(std::list::iterator i = from; i != nodeTree.end(); i++){ - tagNode = *i; + for(std::list::iterator i = from; i != nodeTree.end(); ++i){ + DOTCONFDocumentNode * tagNode = *i; if(!tagNode->closed){ error(tagNode->lineNum, tagNode->fileName, "unclosed tag %s", tagNode->name); ret = -1; break; } - vi = 0; + int vi = 0; while( vi < tagNode->valuesCount ){ //if((tagNode->values[vi])[0] == '$' && (tagNode->values[vi])[1] == '{' && strchr(tagNode->values[vi], '}') ){ if(strstr(tagNode->values[vi], "${") && strchr(tagNode->values[vi], '}') ){ @@ -338,7 +336,7 @@ int DOTCONFDocument::setContent(const char * _fileName) char realpathBuf[PATH_MAX]; if(realpath(_fileName, realpathBuf) == NULL){ - error(0, NULL, "realpath(%s) failed: %s", _fileName, strerror(errno)); + error(0, _fileName, "realpath('%s') failed: %s", _fileName, strerror(errno)); return -1; } @@ -377,7 +375,7 @@ int DOTCONFDocument::setContent(const char * _fileName) std::list::iterator from; DOTCONFDocumentNode * tagNode = NULL; int vi = 0; - for(std::list::iterator i = nodeTree.begin(); i!=nodeTree.end(); i++){ + for(std::list::iterator i = nodeTree.begin(); i!=nodeTree.end(); ++i){ tagNode = *i; if(!cmp_func("IncludeFile", tagNode->name)){ vi = 0; @@ -397,6 +395,7 @@ int DOTCONFDocument::setContent(const char * _fileName) case GLOB_NOSPACE: error(tagNode->lineNum, tagNode->fileName, "glob call failed for '%s': no free space", nodeFilePath.c_str()); return -1; +#ifndef FREE_BSD case GLOB_ABORTED: // printf("Read error\n"); // Ignore that error @@ -405,6 +404,7 @@ int DOTCONFDocument::setContent(const char * _fileName) // printf("No match\n"); // Ignore that error break; +#endif default: error(tagNode->lineNum, tagNode->fileName, "glob call failed for '%s': unknown error", nodeFilePath.c_str()); return -1; @@ -423,7 +423,7 @@ int DOTCONFDocument::setContent(const char * _fileName) } bool processed = false; - for(std::list::const_iterator itInode = processedFiles.begin(); itInode != processedFiles.end(); itInode++){ + for(std::list::const_iterator itInode = processedFiles.begin(); itInode != processedFiles.end(); ++itInode){ if(!strcmp(*itInode, realpathBuf)){ processed = true; break; @@ -442,7 +442,7 @@ int DOTCONFDocument::setContent(const char * _fileName) } //free(fileName); fileName = strdup(realpathBuf); - from = nodeTree.end(); from--; + from = nodeTree.end(); --from; if(tagNode->parentNode){ DOTCONFDocumentNode * nd = tagNode->parentNode->childNode; @@ -485,9 +485,9 @@ int DOTCONFDocument::setContent(const char * _fileName) int DOTCONFDocument::checkRequiredOptions() { - for(std::list::const_iterator ci = requiredOptions.begin(); ci != requiredOptions.end(); ci++){ + for(std::list::const_iterator ci = requiredOptions.begin(); ci != requiredOptions.end(); ++ci){ bool matched = false; - for(std::list::iterator i = nodeTree.begin(); i!=nodeTree.end(); i++){ + for(std::list::iterator i = nodeTree.begin(); i!=nodeTree.end(); ++i){ if(!cmp_func((*i)->name, *ci)){ matched = true; break; @@ -506,13 +506,17 @@ void DOTCONFDocument::error(int lineNum, const char * fileName, const char * fmt va_list args; va_start(args, fmt); - size_t len = (lineNum!=0?strlen(fileName):0) + strlen(fmt) + 50; + char msg[256]; + + vsnprintf(msg, 256, fmt, args); + + size_t len = (lineNum!=0?strlen(fileName):0) + strlen(msg) + 50; char * buf = (char*)mempool->alloc(len); if(lineNum) - (void) snprintf(buf, len, "DOTCONF++: file '%s', line %d: %s\n", fileName, lineNum, fmt); + (void) snprintf(buf, len, "DOTCONF++: file '%s', line %d: %s\n", fileName, lineNum, msg); else - (void) snprintf(buf, len, "DOTCONF++: %s\n", fmt); + (void) snprintf(buf, len, "DOTCONF++: file '%s': %s\n", fileName, msg); if (errorCallback) { errorCallback(errorCallbackData, buf); @@ -558,9 +562,8 @@ char * DOTCONFDocument::getSubstitution(char * macro, int lineNum) buf = mempool->strdup(subs); } else { std::list::iterator i = nodeTree.begin(); - DOTCONFDocumentNode * tagNode = NULL; - for(; i!=nodeTree.end(); i++){ - tagNode = *i; + for(; i!=nodeTree.end(); ++i){ + DOTCONFDocumentNode * tagNode = *i; if(!cmp_func(tagNode->name, variable)){ if(tagNode->valuesCount != 0){ buf = mempool->strdup(tagNode->values[0]); @@ -634,12 +637,12 @@ const DOTCONFDocumentNode * DOTCONFDocument::findNode(const char * nodeName, con if(startNode != NULL){ while( i != nodeTree.end() && (*i) != startNode ){ - i++; + ++i; } - if( i != nodeTree.end() ) i++; + if( i != nodeTree.end() ) ++i; } - for(; i!=nodeTree.end(); i++){ + for(; i!=nodeTree.end(); ++i){ //if(parentNode != NULL && (*i)->parentNode != parentNode){ if((*i)->parentNode != parentNode){ continue;