Line Flow Count Block(s) Source
1 - /*
2 - * Copyright (C) the libgit2 contributors. All rights reserved.
3 - *
4 - * This file is part of libgit2, distributed under the GNU GPL v2 with
5 - * a Linking Exception. For full terms see the included COPYING file.
6 - */
7 -
8 - #include "hash.h"
9 -
10 9 2 int git_hash_global_init(void)
11 - {
12 9 2 return git_hash_sha1_global_init();
13 - }
14 -
15 140896 2 int git_hash_ctx_init(git_hash_ctx *ctx)
16 - {
17 - int error;
18 -
19 140896 2,3 if ((error = git_hash_sha1_ctx_init(&ctx->sha1)) < 0)
20 ##### 4 return error;
21 -
22 140775 5 ctx->algo = GIT_HASH_ALGO_SHA1;
23 -
24 140775 5 return 0;
25 - }
26 -
27 141366 2 void git_hash_ctx_cleanup(git_hash_ctx *ctx)
28 - {
29 141366 2 switch (ctx->algo) {
30 - case GIT_HASH_ALGO_SHA1:
31 141366 3 git_hash_sha1_ctx_cleanup(&ctx->sha1);
32 141314 5 return;
33 - default:
34 - 4 assert(0);
35 - }
36 - }
37 -
38 5302 2 int git_hash_init(git_hash_ctx *ctx)
39 - {
40 5302 2 switch (ctx->algo) {
41 - case GIT_HASH_ALGO_SHA1:
42 5302 3 return git_hash_sha1_init(&ctx->sha1);
43 - default:
44 - 4 assert(0);
45 - return -1;
46 - }
47 - }
48 -
49 256406 2 int git_hash_update(git_hash_ctx *ctx, const void *data, size_t len)
50 - {
51 256406 2 switch (ctx->algo) {
52 - case GIT_HASH_ALGO_SHA1:
53 256406 3 return git_hash_sha1_update(&ctx->sha1, data, len);
54 - default:
55 - 4 assert(0);
56 - return -1;
57 - }
58 - }
59 -
60 141162 2 int git_hash_final(git_oid *out, git_hash_ctx *ctx)
61 - {
62 141162 2 switch (ctx->algo) {
63 - case GIT_HASH_ALGO_SHA1:
64 141162 3 return git_hash_sha1_final(out, &ctx->sha1);
65 - default:
66 - 4 assert(0);
67 - return -1;
68 - }
69 - }
70 -
71 43213 2 int git_hash_buf(git_oid *out, const void *data, size_t len)
72 - {
73 - git_hash_ctx ctx;
74 43213 2 int error = 0;
75 -
76 43215 2,3 if (git_hash_ctx_init(&ctx) < 0)
77 ##### 4 return -1;
78 -
79 43215 5,6 if ((error = git_hash_update(&ctx, data, len)) >= 0)
80 43213 7 error = git_hash_final(out, &ctx);
81 -
82 43213 8 git_hash_ctx_cleanup(&ctx);
83 -
84 43212 9 return error;
85 - }
86 -
87 83502 2 int git_hash_vec(git_oid *out, git_buf_vec *vec, size_t n)
88 - {
89 - git_hash_ctx ctx;
90 - size_t i;
91 83502 2 int error = 0;
92 -
93 83502 2,3 if (git_hash_ctx_init(&ctx) < 0)
94 11 4 return -1;
95 -
96 250286 5,9,10 for (i = 0; i < n; i++) {
97 166958 6,7 if ((error = git_hash_update(&ctx, vec[i].data, vec[i].len)) < 0)
98 ##### 8 goto done;
99 - }
100 -
101 83983 11 error = git_hash_final(out, &ctx);
102 -
103 - done:
104 84030 12 git_hash_ctx_cleanup(&ctx);
105 -
106 83890 13 return error;
107 - }