handle NULL pointer in regExp

This commit is contained in:
Mark Olesen
2008-12-18 09:30:06 +01:00
parent 239c31f30f
commit a43b7a916e
3 changed files with 50 additions and 11 deletions

View File

@ -1,3 +0,0 @@
EXE_LIBS = \
$(FOAM_LIBBIN)/libOSspecific.o

View File

@ -76,6 +76,36 @@ int main(int argc, char *argv[])
Info << endl;
}
Info<<"test regExp(const char*) ..." << endl;
string me("Mark");
if (regExp("[Mm]ar[ck]").match(me))
{
Info<< "matched: " << me << endl;
}
else
{
Info<< "no match" << endl;
}
if (regExp("").match(me))
{
Info<< "matched: " << me << endl;
}
else
{
Info<< "no match" << endl;
}
if (regExp(NULL).match(me))
{
Info<< "matched: " << me << endl;
}
else
{
Info<< "no match" << endl;
}
Info<< endl;
return 0;

View File

@ -37,6 +37,10 @@ License
void Foam::regExp::compile(const char* pat) const
{
clear();
// avoid NULL and zero-length patterns
if (pat && *pat)
{
preg_ = new regex_t;
if (regcomp(preg_, pat, REG_EXTENDED) != 0)
@ -47,6 +51,7 @@ void Foam::regExp::compile(const char* pat) const
) << "Failed to compile regular expression '" << pat << "'"
<< exit(FatalError);
}
}
}
@ -60,6 +65,7 @@ void Foam::regExp::clear() const
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::regExp::regExp()
@ -83,6 +89,7 @@ Foam::regExp::regExp(const char* pat)
compile(pat);
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::regExp::~regExp()
@ -90,6 +97,7 @@ Foam::regExp::~regExp()
clear();
}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
int Foam::regExp::ngroups() const
@ -110,6 +118,7 @@ bool Foam::regExp::match
regmatch_t pmatch[1];
// match and also verify that the entire string was matched
// pmatch[0] is the entire match
if
(
regexec(preg_, str.c_str(), nmatch, pmatch, 0) == 0
@ -141,6 +150,8 @@ bool Foam::regExp::match
regmatch_t pmatch[nmatch];
// match and also verify that the entire string was matched
// pmatch[0] is the entire match
// pmatch[1..] are the (...) sub-groups
if
(
regexec(preg_, str.c_str(), nmatch, pmatch, 0) == 0
@ -179,8 +190,8 @@ bool Foam::regExp::match
return false;
}
// * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * * //
void Foam::regExp::operator=(const string& pat)
{
@ -193,4 +204,5 @@ void Foam::regExp::operator=(const char* pat)
compile(pat);
}
// ************************************************************************* //