Revert "Convert config framework to use std::regex"

This reverts commit 65ee2287e9.
This commit is contained in:
Tim Wojtulewicz 2023-04-12 16:05:46 -07:00
parent a811722d72
commit 777dff18cd

View file

@ -2,11 +2,11 @@
#include "zeek/input/readers/config/Config.h" #include "zeek/input/readers/config/Config.h"
#include <regex.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
#include <unistd.h> #include <unistd.h>
#include <cerrno> #include <cerrno>
#include <regex>
#include <sstream> #include <sstream>
#include <unordered_set> #include <unordered_set>
@ -181,32 +181,28 @@ bool Config::DoUpdate()
unseen_options.insert(i.first); unseen_options.insert(i.first);
} }
std::regex re; regex_t re;
try if ( regcomp(&re, "^([^[:blank:]]+)[[:blank:]]+([^[:blank:]](.*[^[:blank:]])?)?[[:blank:]]*$",
REG_EXTENDED) )
{ {
re.assign("^([^[:blank:]]+)[[:blank:]]+([^[:blank:]](.*[^[:blank:]])?)?[[:blank:]]*$", Error(Fmt("Failed to compile regex."));
std::regex::extended);
}
catch ( const std::regex_error& e )
{
Error(Fmt("Failed to compile regex: %s", e.what()));
return true; return true;
} }
while ( GetLine(line) ) while ( GetLine(line) )
{ {
std::smatch match; regmatch_t match[3];
if ( ! std::regex_match(line, match, re) ) if ( regexec(&re, line.c_str(), 3, match, 0) )
{ {
Warning( Warning(
Fmt("Could not parse '%s'; line has invalid format. Ignoring line.", line.c_str())); Fmt("Could not parse '%s'; line has invalid format. Ignoring line.", line.c_str()));
continue; continue;
} }
std::string key = match[1].str(); std::string key = line.substr(match[1].rm_so, match[1].rm_eo - match[1].rm_so);
std::string value; std::string value;
if ( match.size() > 2 ) if ( match[2].rm_so > 0 )
value = match[2].str(); value = line.substr(match[2].rm_so, match[2].rm_eo - match[2].rm_so);
auto typeit = option_types.find(key); auto typeit = option_types.find(key);
if ( typeit == option_types.end() ) if ( typeit == option_types.end() )
@ -287,6 +283,8 @@ bool Config::DoUpdate()
} }
} }
regfree(&re);
if ( Info().mode != MODE_STREAM ) if ( Info().mode != MODE_STREAM )
EndCurrentSend(); EndCurrentSend();