Rewrite stripName without regex

Using a regular expression to find /src/ or \src\ in a string is overkill,
and since regexes can throw exceptions, it makes coverity nervous.

The new code is simpler anyway.
This commit is contained in:
Jean-Marc Lasgouttes 2017-07-06 15:26:32 +02:00
parent 02c9d2e67c
commit 0ba385800e

View File

@ -18,7 +18,6 @@
#include "support/gettext.h" #include "support/gettext.h"
#include "support/lstrings.h" #include "support/lstrings.h"
#include "support/ProgressInterface.h" #include "support/ProgressInterface.h"
#include "support/regex.h"
#include <iostream> #include <iostream>
#include <iomanip> #include <iomanip>
@ -202,15 +201,13 @@ char const * LyXErr::stripName(char const * n)
{ {
string const name = n; string const name = n;
// find the last occurence of /src/ in name // find the last occurence of /src/ in name
static const regex re("[\\/]src[\\/]"); size_t pos = name.rfind("/src/");
string::const_iterator const begin = name.begin(); if (pos == string::npos)
string::const_iterator it = begin; pos = name.rfind("\\src\\");
string::const_iterator const end = name.end(); if (pos == string::npos)
smatch results; return n;
while (regex_search(it, end, results, re)) { else
it = results[0].second; return n + pos + 5;
}
return n + std::distance(begin, it);
} }