Commit 6d8c7cabd6c0435cc7d05380d766a6e0483df67c

Edward Thomson 2022-01-21T19:37:53

oid: introduce `git_oid_raw_ncmp`

diff --git a/src/libgit2/oid.c b/src/libgit2/oid.c
index 19061e8..9a21aac 100644
--- a/src/libgit2/oid.c
+++ b/src/libgit2/oid.c
@@ -203,25 +203,7 @@ int git_oid_equal(const git_oid *a, const git_oid *b)
 
 int git_oid_ncmp(const git_oid *oid_a, const git_oid *oid_b, size_t len)
 {
-	const unsigned char *a = oid_a->id;
-	const unsigned char *b = oid_b->id;
-
-	if (len > GIT_OID_HEXSZ)
-		len = GIT_OID_HEXSZ;
-
-	while (len > 1) {
-		if (*a != *b)
-			return 1;
-		a++;
-		b++;
-		len -= 2;
-	};
-
-	if (len)
-		if ((*a ^ *b) & 0xf0)
-			return 1;
-
-	return 0;
+	return git_oid_raw_ncmp(oid_a->id, oid_b->id, len);
 }
 
 int git_oid_strcmp(const git_oid *oid_a, const char *str)
diff --git a/src/libgit2/oid.h b/src/libgit2/oid.h
index 2df2e60..bce0a27 100644
--- a/src/libgit2/oid.h
+++ b/src/libgit2/oid.h
@@ -25,6 +25,29 @@ extern const git_oid git_oid__empty_tree_sha1;
  */
 char *git_oid_allocfmt(const git_oid *id);
 
+GIT_INLINE(int) git_oid_raw_ncmp(
+	const unsigned char *sha1,
+	const unsigned char *sha2,
+	size_t len)
+{
+	if (len > GIT_OID_HEXSZ)
+		len = GIT_OID_HEXSZ;
+
+	while (len > 1) {
+		if (*sha1 != *sha2)
+			return 1;
+		sha1++;
+		sha2++;
+		len -= 2;
+	};
+
+	if (len)
+		if ((*sha1 ^ *sha2) & 0xf0)
+			return 1;
+
+	return 0;
+}
+
 GIT_INLINE(int) git_oid_raw_cmp(
 	const unsigned char *sha1,
 	const unsigned char *sha2)