off_t last_obj_offset = 0;
uint32_t array[256];
int i, fd;
- SHA_CTX ctx;
+ git_SHA_CTX ctx;
uint32_t index_version;
if (nr_objects) {
if (!index_name) {
static char tmpfile[PATH_MAX];
- snprintf(tmpfile, sizeof(tmpfile),
- "%s/tmp_idx_XXXXXX", get_object_directory());
- fd = xmkstemp(tmpfile);
+ fd = odb_mkstemp(tmpfile, sizeof(tmpfile), "pack/tmp_idx_XXXXXX");
index_name = xstrdup(tmpfile);
} else {
unlink(index_name);
sha1write(f, array, 256 * 4);
/* compute the SHA1 hash of sorted object names. */
- SHA1_Init(&ctx);
+ git_SHA1_Init(&ctx);
/*
* Write the actual SHA1 entries..
sha1write(f, &offset, 4);
}
sha1write(f, obj->sha1, 20);
- SHA1_Update(&ctx, obj->sha1, 20);
+ git_SHA1_Update(&ctx, obj->sha1, 20);
}
if (index_version >= 2) {
sha1write(f, sha1, 20);
sha1close(f, NULL, CSUM_FSYNC);
- SHA1_Final(sha1, &ctx);
+ git_SHA1_Final(sha1, &ctx);
return index_name;
}
unsigned char *partial_pack_sha1,
off_t partial_pack_offset)
{
- static const int buf_sz = 128 * 1024;
- SHA_CTX old_sha1_ctx, new_sha1_ctx;
+ int aligned_sz, buf_sz = 8 * 1024;
+ git_SHA_CTX old_sha1_ctx, new_sha1_ctx;
struct pack_header hdr;
char *buf;
- SHA1_Init(&old_sha1_ctx);
- SHA1_Init(&new_sha1_ctx);
+ git_SHA1_Init(&old_sha1_ctx);
+ git_SHA1_Init(&new_sha1_ctx);
if (lseek(pack_fd, 0, SEEK_SET) != 0)
die("Failed seeking to start of %s: %s", pack_name, strerror(errno));
die("Unable to reread header of %s: %s", pack_name, strerror(errno));
if (lseek(pack_fd, 0, SEEK_SET) != 0)
die("Failed seeking to start of %s: %s", pack_name, strerror(errno));
- SHA1_Update(&old_sha1_ctx, &hdr, sizeof(hdr));
+ git_SHA1_Update(&old_sha1_ctx, &hdr, sizeof(hdr));
hdr.hdr_entries = htonl(object_count);
- SHA1_Update(&new_sha1_ctx, &hdr, sizeof(hdr));
+ git_SHA1_Update(&new_sha1_ctx, &hdr, sizeof(hdr));
write_or_die(pack_fd, &hdr, sizeof(hdr));
partial_pack_offset -= sizeof(hdr);
buf = xmalloc(buf_sz);
+ aligned_sz = buf_sz - sizeof(hdr);
for (;;) {
ssize_t m, n;
- m = (partial_pack_sha1 && partial_pack_offset < buf_sz) ?
- partial_pack_offset : buf_sz;
+ m = (partial_pack_sha1 && partial_pack_offset < aligned_sz) ?
+ partial_pack_offset : aligned_sz;
n = xread(pack_fd, buf, m);
if (!n)
break;
if (n < 0)
die("Failed to checksum %s: %s", pack_name, strerror(errno));
- SHA1_Update(&new_sha1_ctx, buf, n);
+ git_SHA1_Update(&new_sha1_ctx, buf, n);
+
+ aligned_sz -= n;
+ if (!aligned_sz)
+ aligned_sz = buf_sz;
if (!partial_pack_sha1)
continue;
- SHA1_Update(&old_sha1_ctx, buf, n);
+ git_SHA1_Update(&old_sha1_ctx, buf, n);
partial_pack_offset -= n;
if (partial_pack_offset == 0) {
unsigned char sha1[20];
- SHA1_Final(sha1, &old_sha1_ctx);
+ git_SHA1_Final(sha1, &old_sha1_ctx);
if (hashcmp(sha1, partial_pack_sha1) != 0)
die("Unexpected checksum for %s "
"(disk corruption?)", pack_name);
* pack, which also means making partial_pack_offset
* big enough not to matter anymore.
*/
- SHA1_Init(&old_sha1_ctx);
+ git_SHA1_Init(&old_sha1_ctx);
partial_pack_offset = ~partial_pack_offset;
partial_pack_offset -= MSB(partial_pack_offset, 1);
}
free(buf);
if (partial_pack_sha1)
- SHA1_Final(partial_pack_sha1, &old_sha1_ctx);
- SHA1_Final(new_pack_sha1, &new_sha1_ctx);
+ git_SHA1_Final(partial_pack_sha1, &old_sha1_ctx);
+ git_SHA1_Final(new_pack_sha1, &new_sha1_ctx);
write_or_die(pack_fd, new_pack_sha1, 20);
fsync_or_die(pack_fd, pack_name);
}
char packname[46];
/*
- * The first thing we expects from index-pack's output
+ * The first thing we expect from index-pack's output
* is "pack\t%40s\n" or "keep\t%40s\n" (46 bytes) where
* %40s is the newly created pack SHA1 name. In the "keep"
* case, we need it to remove the corresponding .keep file