diff --git a/src/lib/ebus/data.cpp b/src/lib/ebus/data.cpp index a716595f..e744e885 100644 --- a/src/lib/ebus/data.cpp +++ b/src/lib/ebus/data.cpp @@ -1371,9 +1371,10 @@ void DataFieldTemplates::clear() m_fieldsByName.clear(); } -result_t DataFieldTemplates::add(DataField* field, bool replace) +result_t DataFieldTemplates::add(DataField* field, string name, bool replace) { - string name = field->getName(); + if (name.length() == 0) + name = field->getName(); map::iterator it = m_fieldsByName.find(name); if (it != m_fieldsByName.end()) { if (!replace) @@ -1393,11 +1394,19 @@ result_t DataFieldTemplates::add(DataField* field, bool replace) result_t DataFieldTemplates::addFromFile(vector::iterator& begin, const vector::iterator end, void* arg, vector< vector >* defaults, const string& filename, unsigned int lineNo) { DataField* field = NULL; + string name; + if (begin != end) { + size_t colon = begin->find(':'); + if (colon!=string::npos) { + name = begin->substr(0, colon); + begin->erase(0, colon+1); + } + } result_t result = DataField::create(begin, end, this, field, false, true, false); if (result != RESULT_OK) return result; - result = add(field, true); + result = add(field, name, true); if (result != RESULT_OK) delete field; diff --git a/src/lib/ebus/data.h b/src/lib/ebus/data.h index 78f9ad51..8b32649a 100644 --- a/src/lib/ebus/data.h +++ b/src/lib/ebus/data.h @@ -730,11 +730,12 @@ public: /** * Adds a template @a DataField instance to this map. * @param field the @a DataField instance to add. + * @param name the name to use in the map, or the empty string to use the @a DataField name. * @param replace whether replacing an already stored instance is allowed. * @return @a RESULT_OK on success, or an error code. * Note: the caller may not free the added instance on success. */ - result_t add(DataField* field, bool replace=false); + result_t add(DataField* field, string name="", bool replace=false); // @copydoc virtual result_t addFromFile(vector::iterator& begin, const vector::iterator end, void* arg, vector< vector >* defaults, const string& filename, unsigned int lineNo);