diff --git a/src/utils/conftree.h b/src/utils/conftree.h index 601ae85e..7a49434c 100644 --- a/src/utils/conftree.h +++ b/src/utils/conftree.h @@ -390,9 +390,8 @@ public: ConfStack(const std::string& nm, const std::vector& dirs, bool ro = true) { std::vector fns; - for (std::vector::const_iterator it = dirs.begin(); - it != dirs.end(); it++) { - fns.push_back(path_cat(*it, nm)); + for (const auto& dir : dirs) { + fns.push_back(path_cat(dir, nm)); } ConfStack::construct(fns, ro); } @@ -419,9 +418,8 @@ public: } virtual bool sourceChanged() const override { - typename std::vector::const_iterator it; - for (it = m_confs.begin(); it != m_confs.end(); it++) { - if ((*it)->sourceChanged()) { + for (const auto& conf : m_confs) { + if (conf->sourceChanged()) { return true; } } @@ -447,9 +445,8 @@ public: } virtual bool hasNameAnywhere(const std::string& nm) const override { - typename std::vector::const_iterator it; - for (it = m_confs.begin(); it != m_confs.end(); it++) { - if ((*it)->hasNameAnywhere(nm)) { + for (const auto& conf : m_confs) { + if (conf->hasNameAnywhere(nm)) { return true; } } @@ -466,7 +463,7 @@ public: // Avoid adding unneeded entries: if the new value matches the // one out from the deeper configs, erase or dont add it // from/to the topmost file - typename std::vector::iterator it = m_confs.begin(); + auto it = m_confs.begin(); it++; while (it != m_confs.end()) { std::string value; @@ -509,12 +506,11 @@ public: virtual std::vector getNames1( const std::string& sk, const char *pattern, bool shallow) const { std::vector nms; - typename std::vector::const_iterator it; bool skfound = false; - for (it = m_confs.begin(); it != m_confs.end(); it++) { - if ((*it)->hasSubKey(sk)) { + for (const auto& conf : m_confs) { + if (conf->hasSubKey(sk)) { skfound = true; - std::vector lst = (*it)->getNames(sk, pattern); + std::vector lst = conf->getNames(sk, pattern); nms.insert(nms.end(), lst.begin(), lst.end()); } if (shallow && skfound) { @@ -532,10 +528,9 @@ public: } virtual std::vector getSubKeys(bool shallow) const override { std::vector sks; - typename std::vector::const_iterator it; - for (it = m_confs.begin(); it != m_confs.end(); it++) { + for (const auto& conf : m_confs) { std::vector lst; - lst = (*it)->getSubKeys(); + lst = conf->getSubKeys(); sks.insert(sks.end(), lst.begin(), lst.end()); if (shallow) { break; @@ -557,9 +552,8 @@ private: /// Reset to pristine void clear() { - typename std::vector::iterator it; - for (it = m_confs.begin(); it != m_confs.end(); it++) { - delete(*it); + for (auto& conf : m_confs) { + delete(conf); } m_confs.clear(); } @@ -567,34 +561,29 @@ private: /// Common code to initialize from existing object void init_from(const ConfStack& rhs) { if ((m_ok = rhs.m_ok)) { - typename std::vector::const_iterator it; - for (it = rhs.m_confs.begin(); it != rhs.m_confs.end(); it++) { - m_confs.push_back(new T(**it)); + for (const auto& conf : rhs.m_confs) { + m_confs.push_back(new T(*conf)); } } } - /// Common construct from file names code + /// Common construct from file names code. We used to be ok even + /// if some files were not readable/parsable. Now fail if any + /// fails. void construct(const std::vector& fns, bool ro) { - std::vector::const_iterator it; - bool lastok = false; - for (it = fns.begin(); it != fns.end(); it++) { - T* p = new T(it->c_str(), ro); + bool ok = true; + for (const auto& fn : fns) { + T* p = new T(fn.c_str(), ro); if (p && p->ok()) { m_confs.push_back(p); - lastok = true; } else { delete p; - lastok = false; - if (!ro) { - // For rw acccess, the topmost file needs to be ok - // (ro is set to true after the first file) - break; - } + ok = false; } + // Only the first file is opened rw ro = true; } - m_ok = lastok; + m_ok = ok; } };