oid: Uniformize ncmp methods Drop redundant methods. The ncmp method is now public
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
diff --git a/include/git2/oid.h b/include/git2/oid.h
index 74d5bd3..06bbfcc 100644
--- a/include/git2/oid.h
+++ b/include/git2/oid.h
@@ -55,6 +55,7 @@ typedef struct {
/**
* Parse a hex formatted object id into a git_oid.
+ *
* @param out oid structure the result is written into.
* @param str input hex string; must be pointing at the start of
* the hex sequence and have at least the number of bytes
@@ -65,6 +66,7 @@ GIT_EXTERN(int) git_oid_fromstr(git_oid *out, const char *str);
/**
* Copy an already raw oid into a git_oid structure.
+ *
* @param out oid structure the result is written into.
* @param raw the raw input bytes to be copied.
*/
@@ -72,6 +74,7 @@ GIT_EXTERN(void) git_oid_fromraw(git_oid *out, const unsigned char *raw);
/**
* Format a git_oid into a hex string.
+ *
* @param str output hex string; must be pointing at the start of
* the hex sequence and have at least the number of bytes
* needed for an oid encoded in hex (40 bytes). Only the
@@ -83,7 +86,7 @@ GIT_EXTERN(void) git_oid_fmt(char *str, const git_oid *oid);
/**
* Format a git_oid into a loose-object path string.
- * <p>
+ *
* The resulting string is "aa/...", where "aa" is the first two
* hex digitis of the oid and "..." is the remaining 38 digits.
*
@@ -98,6 +101,7 @@ GIT_EXTERN(void) git_oid_pathfmt(char *str, const git_oid *oid);
/**
* Format a git_oid into a newly allocated c-string.
+ *
* @param oid the oid structure to format
* @return the c-string; NULL if memory is exhausted. Caller must
* deallocate the string with free().
@@ -106,7 +110,7 @@ GIT_EXTERN(char *) git_oid_allocfmt(const git_oid *oid);
/**
* Format a git_oid into a buffer as a hex format c-string.
- * <p>
+ *
* If the buffer is smaller than GIT_OID_HEXSZ+1, then the resulting
* oid c-string will be truncated to n-1 characters. If there are
* any input parameter errors (out == NULL, n == 0, oid == NULL),
@@ -123,6 +127,7 @@ GIT_EXTERN(char *) git_oid_to_string(char *out, size_t n, const git_oid *oid);
/**
* Copy an oid from one structure to another.
+ *
* @param out oid structure the result is written into.
* @param src oid structure to copy from.
*/
@@ -130,6 +135,7 @@ GIT_EXTERN(void) git_oid_cpy(git_oid *out, const git_oid *src);
/**
* Compare two oid structures.
+ *
* @param a first oid structure.
* @param b second oid structure.
* @return <0, 0, >0 if a < b, a == b, a > b.
@@ -139,12 +145,13 @@ GIT_EXTERN(int) git_oid_cmp(const git_oid *a, const git_oid *b);
/**
* Compare the first 'len' hexadecimal characters (packets of 4 bits)
* of two oid structures.
- * @param len the number of hex chars to compare
+ *
* @param a first oid structure.
* @param b second oid structure.
+ * @param len the number of hex chars to compare
* @return 0 in case of a match
*/
-GIT_EXTERN(int) git_oid_ncmp(unsigned int len, git_oid *a, git_oid *b);
+GIT_EXTERN(int) git_oid_ncmp(const git_oid *a, const git_oid *b, unsigned int len);
/**
* OID Shortener object
diff --git a/src/odb_loose.c b/src/odb_loose.c
index 006ba9c..510712b 100644
--- a/src/odb_loose.c
+++ b/src/odb_loose.c
@@ -26,10 +26,10 @@
#include "common.h"
#include "git2/zlib.h"
#include "git2/object.h"
+#include "git2/oid.h"
#include "fileops.h"
#include "hash.h"
#include "odb.h"
-#include "oid.h"
#include "delta-apply.h"
#include "filebuf.h"
@@ -491,8 +491,12 @@ int fn_locate_object_short_oid(void *state, char *pathbuf) {
}
if (!gitfo_exists(pathbuf) && gitfo_isdir(pathbuf)) {
- /* We are already in the directory matching the 2 first hex characters */
- if (!git_oid_ncmp_hex(sstate->short_oid_len-2, sstate->short_oid+2, (unsigned char *)pathbuf + sstate->dir_len)) {
+ /* We are already in the directory matching the 2 first hex characters,
+ * compare the first ncmp characters of the oids */
+ if (!memcmp(sstate->short_oid + 2,
+ (unsigned char *)pathbuf + sstate->dir_len,
+ sstate->short_oid_len - 2)) {
+
if (!sstate->found) {
sstate->res_oid[0] = sstate->short_oid[0];
sstate->res_oid[1] = sstate->short_oid[1];
diff --git a/src/odb_pack.c b/src/odb_pack.c
index d02338d..8a88a0b 100644
--- a/src/odb_pack.c
+++ b/src/odb_pack.c
@@ -26,10 +26,10 @@
#include "common.h"
#include "git2/zlib.h"
#include "git2/repository.h"
+#include "git2/oid.h"
#include "fileops.h"
#include "hash.h"
#include "odb.h"
-#include "oid.h"
#include "delta-apply.h"
#include "sha1_lookup.h"
@@ -1011,7 +1011,7 @@ static int pack_entry_find_offset(
if (pos < (int)p->num_objects) {
current = index + pos * stride;
- if (!git_oid_ncmp_raw(len, short_oid->id, current)) {
+ if (!git_oid_ncmp(short_oid, (const git_oid *)current, len)) {
found = 1;
}
}
@@ -1021,7 +1021,7 @@ static int pack_entry_find_offset(
/* Check for ambiguousity */
const unsigned char *next = current + stride;
- if (!git_oid_ncmp_raw(len, short_oid->id, next)) {
+ if (!git_oid_ncmp(short_oid, (const git_oid *)next, len)) {
found = 2;
}
}
diff --git a/src/oid.c b/src/oid.c
index 031be06..3e3237f 100644
--- a/src/oid.c
+++ b/src/oid.c
@@ -172,30 +172,24 @@ int git_oid_cmp(const git_oid *a, const git_oid *b)
return memcmp(a->id, b->id, sizeof(a->id));
}
-
-int git_oid_ncmp_raw(unsigned int len, const unsigned char *a, const unsigned char *b)
-{
- do {
- if (*a != *b)
- return 1;
- a++;
- b++;
- len -= 2;
- } while (len > 1);
- if (len)
- if ((*a ^ *b) & 0xf0)
- return 1;
- return 0;
-}
-
-int git_oid_ncmp_hex(unsigned int len, const unsigned char *a, const unsigned char *b)
-{
- return memcmp(a, b, len);
-}
-
-int git_oid_ncmp(unsigned int len, git_oid *a, git_oid *b)
+int git_oid_ncmp(const git_oid *oid_a, const git_oid *oid_b, unsigned int len)
{
- return git_oid_ncmp_raw(len, a->id, b->id);
+ const unsigned char *a = oid_a->id;
+ const unsigned char *b = oid_b->id;
+
+ do {
+ if (*a != *b)
+ return 1;
+ a++;
+ b++;
+ len -= 2;
+ } while (len > 1);
+
+ if (len)
+ if ((*a ^ *b) & 0xf0)
+ return 1;
+
+ return 0;
}
typedef short node_index;
diff --git a/src/oid.h b/src/oid.h
deleted file mode 100644
index afdfcf9..0000000
--- a/src/oid.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef INCLUDE_oid_h__
-#define INCLUDE_oid_h__
-
-/**
- * Compare the first ('len'*4) bits of two raw formatted oids.
- * This can be useful for internal use.
- * Return 0 if they match.
- */
-int git_oid_ncmp_raw(unsigned int len, const unsigned char *a, const unsigned char *b);
-
-/**
- * Compare the first 'len' characters of two hex formatted oids.
- * Return 0 if they match.
- */
-int git_oid_ncmp_hex(unsigned int len, const unsigned char *a, const unsigned char *b);
-
-#endif