According to https://isocpp.org/blog/2014/04/gcc-4.9.0
It's been released for over 4 years. -----Original Message----- From: gary <gary....@dektech.com.au> Date: Thursday, 20 September 2018 at 10:11 pm To: Hans Nordeback <hans.nordeb...@ericsson.com> Cc: <opensaf-devel@lists.sourceforge.net> Subject: Re: [devel] [PATCH 2/3] base: add config file reader [#2923] Hi Hans Just tested it with 4.9.3 and it works fine. It doesn't link with 4.8.5 config_file_reader.cc:(.text+0x1c8): undefined reference to `std::regex_token_iterator<__gnu_cxx::__normal_iterator<char const*, std::string>, char, std::regex_traits<char> >::regex_token_iterator(__gnu_cxx::__normal_iterator<char const*, std::string>, __gnu_cxx::__normal_iterator<char const*, std::string>, std::basic_regex<char, std::regex_traits<char> > const&, int, std::bitset<11ul>) Is it time to upgrade the gcc requirement? ( Gary -----Original Message----- From: Hans Nordeback <hans.nordeb...@ericsson.com> Date: Thursday, 20 September 2018 at 8:40 pm To: gary <gary....@dektech.com.au> Cc: <opensaf-devel@lists.sourceforge.net> Subject: Re: [PATCH 2/3] base: add config file reader [#2923] ack, review only. Some comments below. /Thanks HansN On 09/19/2018 05:42 AM, Gary Lee wrote: > Some configuration attribute are read by OpenSAF daemons as > environment variables. eg. > > export FMS_PROMOTE_ACTIVE_TIMER=0 > > There is no easy way to reload these values without a restart. > > ConfigFileReader will parse these files looking for 'export VAR=VAL' > and store them into a map, so a daemon can reload configuration > without a restart. > --- > src/base/Makefile.am | 2 ++ > src/base/config_file_reader.cc | 43 ++++++++++++++++++++++++++++++++++ > src/base/config_file_reader.h | 30 ++++++++++++++++++++++++ > 3 files changed, 75 insertions(+) > create mode 100644 src/base/config_file_reader.cc > create mode 100644 src/base/config_file_reader.h > > diff --git a/src/base/Makefile.am b/src/base/Makefile.am > index c7dd01900..ce93562e5 100644 > --- a/src/base/Makefile.am > +++ b/src/base/Makefile.am > @@ -33,6 +33,7 @@ lib_libopensaf_core_la_LDFLAGS += \ > lib_libopensaf_core_la_SOURCES += \ > src/base/condition_variable.cc \ > src/base/conf.cc \ > + src/base/config_file_reader.cc \ > src/base/daemon.c \ > src/base/file_descriptor.cc \ > src/base/file_notify.cc \ > @@ -94,6 +95,7 @@ noinst_HEADERS += \ > src/base/buffer.h \ > src/base/condition_variable.h \ > src/base/conf.h \ > + src/base/config_file_reader.h \ > src/base/daemon.h \ > src/base/file_descriptor.h \ > src/base/file_notify.h \ > diff --git a/src/base/config_file_reader.cc b/src/base/config_file_reader.cc > new file mode 100644 > index 000000000..d22930505 > --- /dev/null > +++ b/src/base/config_file_reader.cc > @@ -0,0 +1,43 @@ > +/* -*- OpenSAF -*- > + * > + * Copyright Ericsson AB 2018 - All Rights Reserved. > + * > + * This program is distributed in the hope that it will be useful, but > + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY > + * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed > + * under the GNU Lesser General Public License Version 2.1, February 1999. > + * The complete license can be accessed from the following location: > + * http://opensource.org/licenses/lgpl-license.php > + * See the Copying file included with the OpenSAF distribution for full > + * licensing terms. > + * > + */ > + > +#include <fstream> > +#include <regex> > +#include "base/config_file_reader.h" > + > +ConfigFileReader::SettingsMap ConfigFileReader::ParseFile(const std::string& filename) { > + SettingsMap map; > + std::ifstream file(filename); > + std::string line; > + > + if (file.is_open()) { > + while (getline(file, line)) { > + // go through each line of the config file > + // only process "export key=value" and ignore trailing comments > + // note: value may be surrounded with quotes [HansN] there were some issues found using std::regex with gcc 4.8.4 in ticket #2165 but worked with newer compiler versions, check the review comments for ticket #2165 > + std::regex re("^export\\s*(\\w+)\\s*=\\s*([^#\\n]+)"); > + std::sregex_token_iterator key_iter(line.begin(), line.end(), re, 1); > + std::sregex_token_iterator value_iter(line.begin(), line.end(), re, 2); > + std::sregex_token_iterator end; > + > + for (; key_iter != end && value_iter != end; ++key_iter, ++value_iter) { > + // store key-value pairs into map > + map[key_iter->str()] = value_iter->str(); > + } > + } > + file.close(); > + } > + return map; > +} > diff --git a/src/base/config_file_reader.h b/src/base/config_file_reader.h > new file mode 100644 > index 000000000..cb281b7db > --- /dev/null > +++ b/src/base/config_file_reader.h > @@ -0,0 +1,30 @@ > +/* -*- OpenSAF -*- > + * > + * Copyright Ericsson AB 2018 - All Rights Reserved. > + * > + * This program is distributed in the hope that it will be useful, but > + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY > + * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed > + * under the GNU Lesser General Public License Version 2.1, February 1999. > + * The complete license can be accessed from the following location: > + * http://opensource.org/licenses/lgpl-license.php > + * See the Copying file included with the OpenSAF distribution for full > + * licensing terms. > + * > + */ > + > +#ifndef BASE_CONFIG_FILE_READER_H_ > +#define BASE_CONFIG_FILE_READER_H_ > + > +#include <map> > +#include <string> > + > +class ConfigFileReader { > + public: [HansN] prefer alias declarations to typedefs, (i.e. using). > + typedef std::map<std::string, std::string> SettingsMap; > + > + // parses OpenSAF 'config' files and return key-value pairs in a map > + ConfigFileReader::SettingsMap ParseFile(const std::string& filename); > +}; > + > +#endif /* BASE_CONFIG_FILE_READER_H */ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel