diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-09-12 13:22:23 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-09-12 13:22:23 +0200 |
commit | e5949b5ce8a4ccf4e04a3506bc1c7d15c77b1710 (patch) | |
tree | c7e3eb5fa139ab804b82d405c08232c503460a68 /src/nix-build | |
parent | 5039d3b9de811a9d8392626850aab8f7135e683c (diff) |
Fix build on GCC 4.9
GCC 4.9 doesn't like reassigning a std::stringstream.
http://hydra.nixos.org/build/40371644
Diffstat (limited to 'src/nix-build')
-rwxr-xr-x | src/nix-build/nix-build.cc | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/src/nix-build/nix-build.cc b/src/nix-build/nix-build.cc index 83ed25911..248474d53 100755 --- a/src/nix-build/nix-build.cc +++ b/src/nix-build/nix-build.cc @@ -24,7 +24,7 @@ std::vector<string> shellwords(const string & s) std::regex whitespace("^(\\s+).*"); auto begin = s.cbegin(); std::vector<string> res; - std::stringstream cur; + std::string cur; enum state { sBegin, sQuote @@ -35,31 +35,28 @@ std::vector<string> shellwords(const string & s) if (st == sBegin) { std::smatch match; if (regex_search(it, s.cend(), match, whitespace)) { - cur << string(begin, it); - res.push_back(cur.str()); - cur = stringstream{}; + cur.append(begin, it); + res.push_back(cur); + cur.clear(); it = match[1].second; begin = it; } } switch (*it) { case '"': - cur << string(begin, it); + cur.append(begin, it); begin = it + 1; st = st == sBegin ? sQuote : sBegin; break; case '\\': /* perl shellwords mostly just treats the next char as part of the string with no special processing */ - cur << string(begin, it); + cur.append(begin, it); begin = ++it; break; } } - cur << string(begin, it); - auto last = cur.str(); - if (!last.empty()) { - res.push_back(std::move(last)); - } + cur.append(begin, it); + if (!cur.empty()) res.push_back(cur); return res; } |