mirror of
https://git.proxmox.com/git/libgit2
synced 2025-08-04 05:24:47 +00:00
pack: use git_buf when building the index name
The way we currently do it depends on the subtlety of strlen vs sizeof and the fact that .pack is one longer than .idx. Let's use a git_buf so we can express the manipulation we want much more clearly.
This commit is contained in:
parent
ca2857d81b
commit
878293f7e1
21
src/pack.c
21
src/pack.c
@ -319,9 +319,9 @@ static int pack_index_check(const char *path, struct git_pack_file *p)
|
||||
|
||||
static int pack_index_open(struct git_pack_file *p)
|
||||
{
|
||||
char *idx_name;
|
||||
int error = 0;
|
||||
size_t name_len, base_len;
|
||||
size_t name_len;
|
||||
git_buf idx_name = GIT_BUF_INIT;
|
||||
|
||||
if (p->index_version > -1)
|
||||
return 0;
|
||||
@ -329,22 +329,23 @@ static int pack_index_open(struct git_pack_file *p)
|
||||
name_len = strlen(p->pack_name);
|
||||
assert(name_len > strlen(".pack")); /* checked by git_pack_file alloc */
|
||||
|
||||
if ((idx_name = git__malloc(name_len)) == NULL)
|
||||
git_buf_grow(&idx_name, name_len);
|
||||
git_buf_put(&idx_name, p->pack_name, name_len - strlen(".pack"));
|
||||
git_buf_puts(&idx_name, ".idx");
|
||||
if (git_buf_oom(&idx_name)) {
|
||||
giterr_set_oom();
|
||||
return -1;
|
||||
|
||||
base_len = name_len - strlen(".pack");
|
||||
memcpy(idx_name, p->pack_name, base_len);
|
||||
memcpy(idx_name + base_len, ".idx", sizeof(".idx"));
|
||||
}
|
||||
|
||||
if ((error = git_mutex_lock(&p->lock)) < 0) {
|
||||
git__free(idx_name);
|
||||
git_buf_free(&idx_name);
|
||||
return error;
|
||||
}
|
||||
|
||||
if (p->index_version == -1)
|
||||
error = pack_index_check(idx_name, p);
|
||||
error = pack_index_check(idx_name.ptr, p);
|
||||
|
||||
git__free(idx_name);
|
||||
git_buf_free(&idx_name);
|
||||
|
||||
git_mutex_unlock(&p->lock);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user