aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/builtins/buildenv.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/builtins/buildenv.cc')
-rw-r--r--src/libstore/builtins/buildenv.cc22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/libstore/builtins/buildenv.cc b/src/libstore/builtins/buildenv.cc
index 7bba33fb9..c8911d153 100644
--- a/src/libstore/builtins/buildenv.cc
+++ b/src/libstore/builtins/buildenv.cc
@@ -174,15 +174,19 @@ void builtinBuildenv(const BasicDerivation & drv)
/* Convert the stuff we get from the environment back into a
* coherent data type. */
Packages pkgs;
- auto derivations = tokenizeString<Strings>(getAttr("derivations"));
- while (!derivations.empty()) {
- /* !!! We're trusting the caller to structure derivations env var correctly */
- auto active = derivations.front(); derivations.pop_front();
- auto priority = stoi(derivations.front()); derivations.pop_front();
- auto outputs = stoi(derivations.front()); derivations.pop_front();
- for (auto n = 0; n < outputs; n++) {
- auto path = derivations.front(); derivations.pop_front();
- pkgs.emplace_back(path, active != "false", priority);
+ {
+ auto derivations = tokenizeString<Strings>(getAttr("derivations"));
+
+ auto itemIt = derivations.begin();
+ while (itemIt != derivations.end()) {
+ /* !!! We're trusting the caller to structure derivations env var correctly */
+ const bool active = "false" != *itemIt++;
+ const int priority = stoi(*itemIt++);
+ const size_t outputs = stoul(*itemIt++);
+
+ for (size_t n {0}; n < outputs; n++) {
+ pkgs.emplace_back(std::move(*itemIt++), active, priority);
+ }
}
}