aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2024-06-14 08:50:08 +0200
committerJunio C Hamano <gitster@pobox.com>2024-06-14 10:26:33 -0700
commit861e8c76f6668a8cbb764ec0ea3ba425dfb86b2a (patch)
tree31f293d0b31897958e126e6cc98c2424568550aa
parentd4d364b2c7442a1dd5bec8ab818791ec8769c3e9 (diff)
downloadgit-861e8c76f6668a8cbb764ec0ea3ba425dfb86b2a.tar.gz
hash: make `is_null_oid()` independent of `the_repository`
The function `is_null_oid()` uses `oideq(oid, null_oid())` to check whether a given object ID is the all-zero object ID. `null_oid()` implicitly relies on `the_repository` though to return the correct null object ID. Get rid of this dependency by always comparing the complete hash array for being all-zeroes. This is possible due to the refactoring of object IDs so that their hash arrays are always fully initialized. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--hash-ll.h6
-rw-r--r--hash.h5
2 files changed, 6 insertions, 5 deletions
diff --git a/hash-ll.h b/hash-ll.h
index b04fe12aef..faf6c292d2 100644
--- a/hash-ll.h
+++ b/hash-ll.h
@@ -341,6 +341,12 @@ static inline unsigned int oidhash(const struct object_id *oid)
return hash;
}
+static inline int is_null_oid(const struct object_id *oid)
+{
+ static const unsigned char null_hash[GIT_MAX_RAWSZ];
+ return !memcmp(oid->hash, null_hash, GIT_MAX_RAWSZ);
+}
+
const char *empty_tree_oid_hex(void);
const char *empty_blob_oid_hex(void);
diff --git a/hash.h b/hash.h
index ddc2e5ca47..84f2296cfb 100644
--- a/hash.h
+++ b/hash.h
@@ -6,11 +6,6 @@
#define the_hash_algo the_repository->hash_algo
-static inline int is_null_oid(const struct object_id *oid)
-{
- return oideq(oid, null_oid());
-}
-
static inline int is_empty_blob_oid(const struct object_id *oid)
{
return oideq(oid, the_hash_algo->empty_blob);