diff options
author | Warner Losh <imp@FreeBSD.org> | 2017-03-24 13:46:26 +0000 |
---|---|---|
committer | Warner Losh <imp@FreeBSD.org> | 2017-03-24 13:46:26 +0000 |
commit | 416823b103f80582ff94bef748b3abca470f8386 (patch) | |
tree | c4648a5b5e2c4e3800a471c7de3afbbe9990b806 | |
parent | dfe5f22fd710dd06dfb3d792274a505e5960d422 (diff) | |
download | src-416823b103f80582ff94bef748b3abca470f8386.tar.gz src-416823b103f80582ff94bef748b3abca470f8386.zip |
Use a more stream-lined version of fix_value.
Submitted by: ian@
Notes
Notes:
svn path=/head/; revision=315901
-rw-r--r-- | sbin/devd/devd.cc | 22 | ||||
-rw-r--r-- | sbin/devd/devd.hh | 2 |
2 files changed, 8 insertions, 16 deletions
diff --git a/sbin/devd/devd.cc b/sbin/devd/devd.cc index d37f0ee66c9e..a69c38c4a5a3 100644 --- a/sbin/devd/devd.cc +++ b/sbin/devd/devd.cc @@ -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 diff --git a/sbin/devd/devd.hh b/sbin/devd/devd.hh index 4c71228c339c..945eb2fd6820 100644 --- a/sbin/devd/devd.hh +++ b/sbin/devd/devd.hh @@ -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; }; |