refs/files: fix NULL pointer deref when releasing ref store
[git/gitster.git] / hash.h
blobe064807c17333ab1ab5572adb4f331305bcad954
1 #ifndef HASH_H
2 #define HASH_H
4 #include "hash-ll.h"
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;
17 if (!oid1->algo)
18 algop = the_hash_algo;
19 else
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;
32 if (!oid1->algo)
33 algop = the_hash_algo;
34 else
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)
53 size_t hashsz;
55 if (!src->algo)
56 hashsz = the_hash_algo->rawsz;
57 else
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);
107 #endif