Use a more stream-lined version of fix_value.

Submitted by: ian@
This commit is contained in:
Warner Losh 2017-03-24 13:46:26 +00:00
parent dfe5f22fd7
commit 416823b103
2 changed files with 8 additions and 16 deletions

View File

@ -417,24 +417,16 @@ var_list::is_set(const string &var) const
* converted to ". For all other characters, both \ and following
* character. So the string 'fre\:\"' is translated to 'fred\:"'.
*/
const std::string &
std::string
var_list::fix_value(const std::string &val) const
{
char *tmp, *dst;
const char *src;
std::string *rv;
std::string rv(val);
std::string::size_type pos(0);
dst = tmp = new char[val.length()];
src = val.c_str();
while (*src) {
if (*src == '\\' && src[1] == '"')
src++;
else
*dst++ = *src++;
}
rv = new string(tmp);
delete tmp;
return *rv;
while ((pos = rv.find("\\\"", pos)) != rv.npos) {
rv.erase(pos, 1);
}
return (rv);
}
void

View File

@ -57,7 +57,7 @@ public:
static const std::string nothing;
private:
const std::string &fix_value(const std::string &val) const;
std::string fix_value(const std::string &val) const;
std::map<std::string, std::string> _vars;
};