Hi Gary,
I think we need to replace the use of std::regex for now. /Thanks HansN
On 09/20/2018 02:09 PM, Gary Lee wrote:
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 <[email protected]>
Date: Thursday, 20 September 2018 at 8:40 pm
To: gary <[email protected]>
Cc: <[email protected]>
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel