about summary refs log tree commit diff
path: root/third_party/nix/src/libutil/hash.cc
diff options
context:
space:
mode:
authorKane York <kanepyork@gmail.com>2020-07-28T01·58-0700
committerkanepyork <rikingcoding@gmail.com>2020-07-29T06·48+0000
commitaddcba11b05500ba28ade309de6bd53f8153a6c4 (patch)
tree22cf6184c40eae388e0fed0eb73fa252ee9298cf /third_party/nix/src/libutil/hash.cc
parente8f893ee100e1c85e08dbfd7244e5c674266c3bc (diff)
fix(3p/nix/hash): smart pointers in HashSink r/1506
Change-Id: Ib2aaf42c8b234ee343c4653eb03f328c113dea86
Reviewed-on: https://cl.tvl.fyi/c/depot/+/1492
Tested-by: BuildkiteCI
Reviewed-by: glittershark <grfn@gws.fyi>
Diffstat (limited to 'third_party/nix/src/libutil/hash.cc')
-rw-r--r--third_party/nix/src/libutil/hash.cc27
1 files changed, 12 insertions, 15 deletions
diff --git a/third_party/nix/src/libutil/hash.cc b/third_party/nix/src/libutil/hash.cc
index 50169b0f19c7..e9901d0ccb94 100644
--- a/third_party/nix/src/libutil/hash.cc
+++ b/third_party/nix/src/libutil/hash.cc
@@ -280,6 +280,8 @@ absl::StatusOr<Hash> Hash::deserialize(const std::string& s, HashType type) {
   return dest;
 }
 
+namespace hash {
+
 union Ctx {
   MD5_CTX md5;
   SHA_CTX sha1;
@@ -324,8 +326,10 @@ static void finish(HashType ht, Ctx& ctx, unsigned char* hash) {
   }
 }
 
+}  // namespace hash
+
 Hash hashString(HashType ht, const std::string& s) {
-  Ctx ctx{};
+  hash::Ctx ctx{};
   Hash hash(ht);
   start(ht, ctx);
   update(ht, ctx, reinterpret_cast<const unsigned char*>(s.data()), s.length());
@@ -334,7 +338,7 @@ Hash hashString(HashType ht, const std::string& s) {
 }
 
 Hash hashFile(HashType ht, const Path& path) {
-  Ctx ctx{};
+  hash::Ctx ctx{};
   Hash hash(ht);
   start(ht, ctx);
 
@@ -357,34 +361,27 @@ Hash hashFile(HashType ht, const Path& path) {
   return hash;
 }
 
-HashSink::HashSink(HashType ht) : ht(ht) {
-  ctx = new Ctx;
-  bytes = 0;
-  start(ht, *ctx);
-}
+HashSink::HashSink(HashType ht) : ht(ht), ctx(), bytes(0) { start(ht, *ctx); }
 
-HashSink::~HashSink() {
-  bufPos = 0;
-  delete ctx;
-}
+HashSink::~HashSink() { bufPos = 0; }
 
 void HashSink::write(const unsigned char* data, size_t len) {
   bytes += len;
-  update(ht, *ctx, data, len);
+  nix::hash::update(ht, *ctx, data, len);
 }
 
 HashResult HashSink::finish() {
   flush();
   Hash hash(ht);
-  nix::finish(ht, *ctx, hash.hash);
+  nix::hash::finish(ht, *ctx, hash.hash);
   return HashResult(hash, bytes);
 }
 
 HashResult HashSink::currentHash() {
   flush();
-  Ctx ctx2 = *ctx;
+  nix::hash::Ctx ctx2 = *ctx;
   Hash hash(ht);
-  nix::finish(ht, ctx2, hash.hash);
+  nix::hash::finish(ht, ctx2, hash.hash);
   return HashResult(hash, bytes);
 }