diff --git a/src/ioc/dbtemplate/msi.cpp b/src/ioc/dbtemplate/msi.cpp index 919894760..ab69b0cc4 100644 --- a/src/ioc/dbtemplate/msi.cpp +++ b/src/ioc/dbtemplate/msi.cpp @@ -376,14 +376,9 @@ typedef struct inputFile { int lineNum; } inputFile; -typedef struct pathNode { - ELLNODE node; - char *directory; -} pathNode; - struct inputData { std::list inputFileList; - ELLLIST pathList; + std::list pathList; char inputBuffer[MAX_BUFFER_SIZE]; inputData() { memset(inputBuffer, 0, sizeof(inputBuffer) * sizeof(inputBuffer[0])); }; }; @@ -397,27 +392,17 @@ static void inputConstruct(inputData **ppvt) inputData *pinputData; pinputData = new inputData; - ellInit(&pinputData->pathList); *ppvt = pinputData; } static void inputDestruct(inputData * const pinputData) { - pathNode *ppathNode; - inputCloseAllFiles(pinputData); - while ((ppathNode = (pathNode *) ellFirst(&pinputData->pathList))) { - ellDelete(&pinputData->pathList, &ppathNode->node); - free(ppathNode->directory); - free(ppathNode); - } delete(pinputData); } static void inputAddPath(inputData * const pinputData, const char * const path) { - ELLLIST *ppathList = &pinputData->pathList; - pathNode *ppathNode; const char *pcolon; const char *pdir; size_t len; @@ -431,15 +416,12 @@ static void inputAddPath(inputData * const pinputData, const char * const path) emptyName = ((*pdir == sep) ? 1 : 0); if (emptyName) ++pdir; - ppathNode = (pathNode *) calloc(1, sizeof(pathNode)); - ellAdd(ppathList, &ppathNode->node); - + std::string directory; if (!emptyName) { pcolon = strchr(pdir, sep); len = (pcolon ? (pcolon - pdir) : strlen(pdir)); if (len > 0) { - ppathNode->directory = (char *) calloc(len + 1, sizeof(char)); - strncpy(ppathNode->directory, pdir, len); + directory = std::string(pdir, len); pdir = pcolon; /*unless at end skip past first colon*/ if (pdir && *(pdir + 1) != 0) ++pdir; @@ -450,9 +432,10 @@ static void inputAddPath(inputData * const pinputData, const char * const path) } if (emptyName) { - ppathNode->directory = (char *) calloc(2, sizeof(char)); - strcpy(ppathNode->directory, "."); + directory = "."; } + + pinputData->pathList.push_back(directory); } EXIT; } @@ -522,8 +505,8 @@ static void inputErrPrint(const inputData *const pinputData) static void inputOpenFile(inputData *pinputData, const char * const filename) { - ELLLIST *ppathList = &pinputData->pathList; - pathNode *ppathNode = 0; + std::list& pathList = pinputData->pathList; + std::list::iterator pathIt = pathList.end(); char *fullname = 0; FILE *fp = 0; @@ -532,16 +515,16 @@ static void inputOpenFile(inputData *pinputData, const char * const filename) STEP("Using stdin"); fp = stdin; } - else if ((ellCount(ppathList) == 0) || strchr(filename, '/')){ + else if (pathList.empty() || strchr(filename, '/')){ STEPS("Opening ", filename); fp = fopen(filename, "r"); } else { - ppathNode = (pathNode *) ellFirst(ppathList); - while (ppathNode) { - fullname = static_cast(calloc(strlen(filename) + strlen(ppathNode->directory) + 2, + pathIt = pathList.begin(); + while(pathIt != pathList.end()) { + fullname = static_cast(calloc(strlen(filename) + pathIt->length() + 2, sizeof(char))); - strcpy(fullname, ppathNode->directory); + strcpy(fullname, pathIt->c_str()); strcat(fullname, "/"); strcat(fullname, filename); STEPS("Trying", filename); @@ -549,7 +532,7 @@ static void inputOpenFile(inputData *pinputData, const char * const filename) if (fp) break; free(fullname); - ppathNode = (pathNode *) ellNext(&ppathNode->node); + ++pathIt; } } @@ -562,7 +545,7 @@ static void inputOpenFile(inputData *pinputData, const char * const filename) STEP("File opened"); inputFile inFile = inputFile(); - if (ppathNode) { + if (pathIt != pathList.end()) { inFile.filename = fullname; } else if (filename) {