diff options
-rw-r--r-- | src/libstore/local-store.cc | 2 | ||||
-rw-r--r-- | src/libstore/store-api.cc | 9 | ||||
-rw-r--r-- | src/libstore/store-api.hh | 6 |
3 files changed, 15 insertions, 2 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 13179459f1c1..7c5945b2aa7e 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -1064,7 +1064,7 @@ StringSet LocalStore::queryDerivationOutputNames(const Path & path) Path LocalStore::queryPathFromHashPart(const string & hashPart) { - if (hashPart.size() != 32) throw Error("invalid hash part"); + if (hashPart.size() != storePathHashLen) throw Error("invalid hash part"); Path prefix = settings.nixStore + "/" + hashPart; diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc index 039d07e29b3e..2f44401827f0 100644 --- a/src/libstore/store-api.cc +++ b/src/libstore/store-api.cc @@ -61,7 +61,14 @@ Path followLinksToStorePath(const Path & path) string storePathToName(const Path & path) { assertStorePath(path); - return string(path, settings.nixStore.size() + 34); + return string(path, settings.nixStore.size() + storePathHashLen + 2); +} + + +string storePathToHash(const Path & path) +{ + assertStorePath(path); + return string(path, settings.nixStore.size() + 1, storePathHashLen); } diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh index 888ef3e2a083..f6fb6c8347a4 100644 --- a/src/libstore/store-api.hh +++ b/src/libstore/store-api.hh @@ -339,6 +339,9 @@ public: }; +const size_t storePathHashLen = 32; // base-32 characters, i.e. 160 bits + + /* !!! These should be part of the store API, I guess. */ /* Throw an exception if `path' is not directly in the Nix store. */ @@ -350,6 +353,9 @@ bool isStorePath(const Path & path); /* Extract the name part of the given store path. */ string storePathToName(const Path & path); +/* Extract the hash part of the given store path. */ +string storePathToHash(const Path & path); + void checkStoreName(const string & name); |