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

Reply via email to