Small cache_tree_write refactor.
This function cannot fail, make it void. Also make write_one act on a const char* instead of a char*. Signed-off-by: Pierre Habouzit <madcoder@debian.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
8289b62095
commit
1dffb8fa80
19
cache-tree.c
19
cache-tree.c
@ -369,10 +369,8 @@ int cache_tree_update(struct cache_tree *it,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void write_one(struct cache_tree *it,
|
||||
char *path,
|
||||
int pathlen,
|
||||
struct strbuf *buffer)
|
||||
static void write_one(struct strbuf *buffer, struct cache_tree *it,
|
||||
const char *path, int pathlen)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -407,20 +405,13 @@ static void write_one(struct cache_tree *it,
|
||||
prev->name, prev->namelen) <= 0)
|
||||
die("fatal - unsorted cache subtree");
|
||||
}
|
||||
write_one(down->cache_tree, down->name, down->namelen, buffer);
|
||||
write_one(buffer, down->cache_tree, down->name, down->namelen);
|
||||
}
|
||||
}
|
||||
|
||||
void *cache_tree_write(struct cache_tree *root, unsigned long *size_p)
|
||||
void cache_tree_write(struct strbuf *sb, struct cache_tree *root)
|
||||
{
|
||||
char path[PATH_MAX];
|
||||
struct strbuf buffer;
|
||||
|
||||
path[0] = 0;
|
||||
strbuf_init(&buffer, 0);
|
||||
write_one(root, path, 0, &buffer);
|
||||
*size_p = buffer.len;
|
||||
return strbuf_detach(&buffer);
|
||||
write_one(sb, root, "", 0);
|
||||
}
|
||||
|
||||
static struct cache_tree *read_one(const char **buffer, unsigned long *size_p)
|
||||
|
@ -22,7 +22,7 @@ void cache_tree_free(struct cache_tree **);
|
||||
void cache_tree_invalidate_path(struct cache_tree *, const char *);
|
||||
struct cache_tree_sub *cache_tree_sub(struct cache_tree *, const char *);
|
||||
|
||||
void *cache_tree_write(struct cache_tree *root, unsigned long *size_p);
|
||||
void cache_tree_write(struct strbuf *, struct cache_tree *root);
|
||||
struct cache_tree *cache_tree_read(const char *buffer, unsigned long size);
|
||||
|
||||
int cache_tree_fully_valid(struct cache_tree *);
|
||||
|
19
read-cache.c
19
read-cache.c
@ -1136,7 +1136,7 @@ int write_index(struct index_state *istate, int newfd)
|
||||
{
|
||||
SHA_CTX c;
|
||||
struct cache_header hdr;
|
||||
int i, removed;
|
||||
int i, err, removed;
|
||||
struct cache_entry **cache = istate->cache;
|
||||
int entries = istate->cache_nr;
|
||||
|
||||
@ -1165,16 +1165,15 @@ int write_index(struct index_state *istate, int newfd)
|
||||
|
||||
/* Write extension data here */
|
||||
if (istate->cache_tree) {
|
||||
unsigned long sz;
|
||||
void *data = cache_tree_write(istate->cache_tree, &sz);
|
||||
if (data &&
|
||||
!write_index_ext_header(&c, newfd, CACHE_EXT_TREE, sz) &&
|
||||
!ce_write(&c, newfd, data, sz))
|
||||
free(data);
|
||||
else {
|
||||
free(data);
|
||||
struct strbuf sb;
|
||||
|
||||
strbuf_init(&sb, 0);
|
||||
cache_tree_write(&sb, istate->cache_tree);
|
||||
err = write_index_ext_header(&c, newfd, CACHE_EXT_TREE, sb.len) < 0
|
||||
|| ce_write(&c, newfd, sb.buf, sb.len) < 0;
|
||||
strbuf_release(&sb);
|
||||
if (err)
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return ce_flush(&c, newfd);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user