]> git.ipfire.org Git - thirdparty/git.git/commitdiff
hash: make `is_null_oid()` independent of `the_repository`
authorPatrick Steinhardt <ps@pks.im>
Fri, 14 Jun 2024 06:50:08 +0000 (08:50 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 14 Jun 2024 17:26:33 +0000 (10:26 -0700)
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>
hash-ll.h
hash.h

index b04fe12aef141b01fff7c247604d1fa795b02851..faf6c292d25079be540f1386ba126cc215fa0d22 100644 (file)
--- 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 ddc2e5ca47d4c99f65b853a6645139163c50e28c..84f2296cfbb72614be9e76475ba334cada79c3cb 100644 (file)
--- 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);