From 4de9b6ded2dc3a1cd4f16380bd424c799a5ea8a6 Mon Sep 17 00:00:00 2001 From: john30 Date: Sat, 26 Sep 2015 16:20:37 +0200 Subject: [PATCH] sort files and directories when reading CSV and use BFS --- src/ebusd/main.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/ebusd/main.cpp b/src/ebusd/main.cpp index 900f04d4..1d4428b0 100644 --- a/src/ebusd/main.cpp +++ b/src/ebusd/main.cpp @@ -474,7 +474,7 @@ static result_t readConfigFiles(const string path, const string extension, DataF return RESULT_ERR_NOTFOUND; dirent* d; - + vector files, dirs; while ((d = readdir(dir)) != NULL) { string fn = d->d_name; @@ -488,21 +488,32 @@ static result_t readConfigFiles(const string path, const string extension, DataF continue; if (S_ISDIR(stat_buf.st_mode)) { - result_t result = readConfigFiles(p, extension, templates, messages, verbose); - if (result != RESULT_OK) - return result; - } - else if (S_ISREG(stat_buf.st_mode)) { + dirs.push_back(p); + } else if (S_ISREG(stat_buf.st_mode)) { if (fn.find(extension, (fn.length() - extension.length())) != string::npos && fn != "_templates" + extension) { - result_t result = messages->readFromFile(p, templates, verbose); - if (result != RESULT_OK) - return result; + files.push_back(p); } } } closedir(dir); + sort(files.begin(), files.end()); + for (vector::iterator it = files.begin(); it != files.end(); it++) { + string name = *it; + logInfo(lf_main, "reading file %s", name.c_str()); + result_t result = messages->readFromFile(name, templates, verbose); + if (result != RESULT_OK) + return result; + } + sort(dirs.begin(), dirs.end()); + for (vector::iterator it = dirs.begin(); it != dirs.end(); it++) { + string name = *it; + logInfo(lf_main, "reading dir %s", name.c_str()); + result_t result = readConfigFiles(name, extension, templates, messages, verbose); + if (result != RESULT_OK) + return result; + } return RESULT_OK; };