diff mbox series

[v3,06/20] hash: make `is_null_oid()` independent of `the_repository`

Message ID 9ae29e1912a661fa0539b0e03421a24566ed611a.1718347699.git.ps@pks.im (mailing list archive)
State Accepted
Commit 861e8c76f6668a8cbb764ec0ea3ba425dfb86b2a
Headers show
Series Introduce `USE_THE_REPOSITORY_VARIABLE` macro | expand

Commit Message

Patrick Steinhardt June 14, 2024, 6:50 a.m. UTC
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>
 hash-ll.h | 6 ++++++
 hash.h    | 5 -----
 2 files changed, 6 insertions(+), 5 deletions(-)
diff mbox series


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);