5 #include "repository.h"
7 #define the_hash_algo the_repository->hash_algo
9 static inline int hashcmp(const unsigned char *sha1
, const unsigned char *sha2
)
11 return hashcmp_algop(sha1
, sha2
, the_hash_algo
);
14 static inline int oidcmp(const struct object_id
*oid1
, const struct object_id
*oid2
)
16 const struct git_hash_algo
*algop
;
18 algop
= the_hash_algo
;
20 algop
= &hash_algos
[oid1
->algo
];
21 return hashcmp_algop(oid1
->hash
, oid2
->hash
, algop
);
24 static inline int hasheq(const unsigned char *sha1
, const unsigned char *sha2
)
26 return hasheq_algop(sha1
, sha2
, the_hash_algo
);
29 static inline int oideq(const struct object_id
*oid1
, const struct object_id
*oid2
)
31 const struct git_hash_algo
*algop
;
33 algop
= the_hash_algo
;
35 algop
= &hash_algos
[oid1
->algo
];
36 return hasheq_algop(oid1
->hash
, oid2
->hash
, algop
);
39 static inline int is_null_oid(const struct object_id
*oid
)
41 return oideq(oid
, null_oid());
44 static inline void hashcpy(unsigned char *sha_dst
, const unsigned char *sha_src
)
46 memcpy(sha_dst
, sha_src
, the_hash_algo
->rawsz
);
49 /* Like oidcpy() but zero-pads the unused bytes in dst's hash array. */
50 static inline void oidcpy_with_padding(struct object_id
*dst
,
51 const struct object_id
*src
)
56 hashsz
= the_hash_algo
->rawsz
;
58 hashsz
= hash_algos
[src
->algo
].rawsz
;
60 memcpy(dst
->hash
, src
->hash
, hashsz
);
61 memset(dst
->hash
+ hashsz
, 0, GIT_MAX_RAWSZ
- hashsz
);
62 dst
->algo
= src
->algo
;
65 static inline void hashclr(unsigned char *hash
)
67 memset(hash
, 0, the_hash_algo
->rawsz
);
70 static inline void oidclr(struct object_id
*oid
)
72 memset(oid
->hash
, 0, GIT_MAX_RAWSZ
);
73 oid
->algo
= hash_algo_by_ptr(the_hash_algo
);
76 static inline void oidread_algop(struct object_id
*oid
, const unsigned char *hash
, const struct git_hash_algo
*algop
)
78 memcpy(oid
->hash
, hash
, algop
->rawsz
);
79 oid
->algo
= hash_algo_by_ptr(algop
);
82 static inline void oidread(struct object_id
*oid
, const unsigned char *hash
)
84 oidread_algop(oid
, hash
, the_hash_algo
);
87 static inline int is_empty_blob_sha1(const unsigned char *sha1
)
89 return hasheq(sha1
, the_hash_algo
->empty_blob
->hash
);
92 static inline int is_empty_blob_oid(const struct object_id
*oid
)
94 return oideq(oid
, the_hash_algo
->empty_blob
);
97 static inline int is_empty_tree_sha1(const unsigned char *sha1
)
99 return hasheq(sha1
, the_hash_algo
->empty_tree
->hash
);
102 static inline int is_empty_tree_oid(const struct object_id
*oid
)
104 return oideq(oid
, the_hash_algo
->empty_tree
);