summaryrefslogtreecommitdiff
path: root/linkers/rld-config.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'linkers/rld-config.cpp')
-rw-r--r--linkers/rld-config.cpp251
1 files changed, 0 insertions, 251 deletions
diff --git a/linkers/rld-config.cpp b/linkers/rld-config.cpp
deleted file mode 100644
index c106120..0000000
--- a/linkers/rld-config.cpp
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright (c) 2014, Chris Johns <chrisj@rtems.org>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-/**
- * @file
- *
- * @ingroup rtems_rld
- *
- * @brief INI Configuration reader.
- *
- */
-
-#include <errno.h>
-
-#include <rld-config.h>
-
-#include <SimpleIni.h>
-
-namespace rld
-{
- namespace config
- {
- item::item (const std::string& text)
- : text (text)
- {
- }
-
- item::item (const char* text)
- : text (text)
- {
- }
-
- bool
- section::has_record (const std::string& name) const
- {
- for (records::const_iterator ri = recs.begin ();
- ri != recs.end ();
- ++ri)
- {
- if ((*ri).name == name)
- return true;
- }
- return false;
- }
-
- const record&
- section::get_record (const std::string& name) const
- {
- for (records::const_iterator ri = recs.begin ();
- ri != recs.end ();
- ++ri)
- {
- if ((*ri).name == name)
- return *ri;
- }
-
- throw rld::error ("not found", "config record: " + this->name + '/' + name);
- }
-
- const std::string
- section::get_record_item (const std::string& rec_name) const
- {
- const record& rec = get_record (rec_name);
- if (rec.items_.size () != 1)
- throw rld::error ("duplicate", "record item: " + name + '/' + rec_name);
- return rec.items_[0].text;
- }
-
- void
- section::get_record_items (const std::string& rec_name, rld::strings& items) const
- {
- const record& rec = get_record (rec_name);
- items.clear ();
- for (rld::config::items::const_iterator ii = rec.items_.begin ();
- ii != rec.items_.end ();
- ++ii)
- {
- items.push_back ((*ii).text);
- }
- }
-
- config::config(const std::string& search_path)
- {
- set_search_path (search_path);
- }
-
- config::~config()
- {
- }
-
- void
- config::set_search_path (const std::string& search_path)
- {
- if (!search_path.empty ())
- rld::path::path_split (search_path, search);
- }
-
- void
- config::clear ()
- {
- secs.clear ();
- }
-
- void
- config::load (const std::string& path)
- {
- CSimpleIniCaseA ini (false, true, true);
-
- std::string checked_path;
-
- if (rld::path::check_file (path))
- {
- checked_path = path;
- }
- else
- {
- bool found = false;
- for (rld::path::paths::const_iterator spi = search.begin ();
- spi != search.end ();
- ++spi)
- {
- rld::path::path_join (*spi, path, checked_path);
- if (rld::path::check_file (checked_path))
- {
- found = true;
- break;
- }
- }
- if (!found)
- throw rld::error ("Not found.", "load config: " + path);
- }
-
- if (ini.LoadFile (checked_path.c_str ()) != SI_OK)
- throw rld::error (::strerror (errno), "load config: " + path);
-
- paths_.push_back (checked_path);
-
- /*
- * Merge the loaded configuration into our configuration.
- */
-
- CSimpleIniCaseA::TNamesDepend skeys;
-
- ini.GetAllSections(skeys);
-
- for (CSimpleIniCaseA::TNamesDepend::const_iterator si = skeys.begin ();
- si != skeys.end ();
- ++si)
- {
- section sec;
-
- sec.name = (*si).pItem;
-
- CSimpleIniCaseA::TNamesDepend rkeys;
-
- ini.GetAllKeys((*si).pItem, rkeys);
-
- for (CSimpleIniCaseA::TNamesDepend::const_iterator ri = rkeys.begin ();
- ri != rkeys.end ();
- ++ri)
- {
- record rec;
-
- rec.name = (*ri).pItem;
-
- CSimpleIniCaseA::TNamesDepend vals;
-
- ini.GetAllValues((*si).pItem, (*ri).pItem, vals);
-
- for (CSimpleIniCaseA::TNamesDepend::const_iterator vi = vals.begin ();
- vi != vals.end ();
- ++vi)
- {
- rec.items_.push_back (item ((*vi).pItem));
- }
-
- sec.recs.push_back (rec);
- }
-
- secs.push_back (sec);
- }
- }
-
-
- void
- config::includes (const section& sec, bool must_exist)
- {
- bool have_includes = false;
-
- try
- {
- rld::strings is;
- parse_items (sec, "include", is);
-
- have_includes = true;
-
- /*
- * Include records are a paths which we can load.
- */
-
- for (rld::strings::const_iterator isi = is.begin ();
- isi != is.end ();
- ++isi)
- {
- load (*isi);
- }
- }
- catch (rld::error re)
- {
- /*
- * No include records, must be all inlined. If we have includes it must
- * be another error so throw it.
- */
- if (have_includes || (!have_includes && must_exist))
- throw;
- }
- }
-
- const section&
- config::get_section (const std::string& name) const
- {
- for (sections::const_iterator si = secs.begin ();
- si != secs.end ();
- ++si)
- {
- if ((*si).name == name)
- return *si;
- }
-
- throw error ("not found", "config section: " + name);
- }
-
- const paths&
- config::get_paths () const
- {
- return paths_;
- }
- }
-}