Commit c9b1e6469e736dd6c17e83c451ae3175612dacab

Jeff King 2017-08-09T16:54:07

oid: use memcmp in git_oid__hashcmp The open-coded version was inherited from git.git. But it turns out it was based on an older version of glibc, whose memcmp was not very optimized. Modern glibc does much better, and some compilers (like gcc 7) can even inline the memcmp into a series of multi-byte xors. Upstream is switching to using memcmp in git/git@0b006014c87f400bd9a86267ed30fd3e7b383884.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
diff --git a/src/oid.h b/src/oid.h
index 922a2a3..ca6c92c 100644
--- a/src/oid.h
+++ b/src/oid.h
@@ -22,14 +22,7 @@ char *git_oid_allocfmt(const git_oid *id);
 
 GIT_INLINE(int) git_oid__hashcmp(const unsigned char *sha1, const unsigned char *sha2)
 {
-	int i;
-
-	for (i = 0; i < GIT_OID_RAWSZ; i++, sha1++, sha2++) {
-		if (*sha1 != *sha2)
-			return *sha1 - *sha2;
-	}
-
-	return 0;
+	return memcmp(sha1, sha2, GIT_OID_RAWSZ);
 }
 
 /*