diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2008-08-05T10·57+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2008-08-05T10·57+0000 |
commit | 98b07466fbb9fc736bba0b93731117fd650e7349 (patch) | |
tree | 4de966345c0351c2f6108d0da4dcdedf4765a8e8 | |
parent | 339c1420096c254b20b5b16b79a075b2c646ee70 (diff) |
* Better error checking of the data from the substituters.
-rw-r--r-- | src/libstore/local-store.cc | 37 |
1 files changed, 16 insertions, 21 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index ccf1a51bc5b2..d8ac9820ff70 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -520,6 +520,16 @@ void LocalStore::startSubstituter(const Path & substituter, RunningSubstituter & } +template<class T> T getIntLine(std::istream & str) +{ + string s; + T res; + getline(str, s); + if (!str || !string2Int(s, res)) throw Error("integer expected from stream"); + return res; +} + + bool LocalStore::hasSubstitutes(const Path & path) { foreach (Paths::iterator, i, substituters) { @@ -528,13 +538,7 @@ bool LocalStore::hasSubstitutes(const Path & path) *run.to << "have\n" << path << "\n" << std::flush; - string s; - - int res; - getline(*run.from, s); - if (!string2Int(s, res)) abort(); - - if (res) return true; + if (getIntLine<int>(*run.from)) return true; } return false; @@ -549,26 +553,17 @@ bool LocalStore::querySubstitutablePathInfo(const Path & substituter, *run.to << "info\n" << path << "\n" << std::flush; - string s; - - int res; - getline(*run.from, s); - if (!string2Int(s, res)) abort(); - - if (!res) return false; + if (!getIntLine<int>(*run.from)) return false; getline(*run.from, info.deriver); - int nrRefs; - getline(*run.from, s); - if (!string2Int(s, nrRefs)) abort(); + if (info.deriver != "") assertStorePath(info.deriver); + int nrRefs = getIntLine<int>(*run.from); while (nrRefs--) { Path p; getline(*run.from, p); + assertStorePath(p); info.references.insert(p); } - getline(*run.from, s); - long long size; - if (!string2Int(s, size)) abort(); - info.downloadSize = size; + info.downloadSize = getIntLine<long long>(*run.from); return true; } |