| 112 | } |
| 113 | |
| 114 | int stream_object_signature(struct repository *r, |
| 115 | struct odb_read_stream *st, |
| 116 | const struct object_id *oid) |
| 117 | { |
| 118 | struct object_id real_oid; |
| 119 | struct git_hash_ctx c; |
| 120 | char hdr[MAX_HEADER_LEN]; |
| 121 | int hdrlen; |
| 122 | |
| 123 | /* Generate the header */ |
| 124 | hdrlen = format_object_header(hdr, sizeof(hdr), st->type, st->size); |
| 125 | |
| 126 | /* Sha1.. */ |
| 127 | r->hash_algo->init_fn(&c); |
| 128 | git_hash_update(&c, hdr, hdrlen); |
| 129 | for (;;) { |
| 130 | char buf[1024 * 16]; |
| 131 | ssize_t readlen = odb_read_stream_read(st, buf, sizeof(buf)); |
| 132 | |
| 133 | if (readlen < 0) { |
| 134 | odb_read_stream_close(st); |
| 135 | return -1; |
| 136 | } |
| 137 | if (!readlen) |
| 138 | break; |
| 139 | git_hash_update(&c, buf, readlen); |
| 140 | } |
| 141 | git_hash_final_oid(&real_oid, &c); |
| 142 | return !oideq(oid, &real_oid) ? -1 : 0; |
| 143 | } |
| 144 | |
| 145 | /* |
| 146 | * Map and close the given loose object fd. The path argument is used for |
no test coverage detected