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:
Pierre Habouzit
2007-09-25 10:22:44 +02:00
committed by Junio C Hamano
parent 8289b62095
commit 1dffb8fa80
3 changed files with 15 additions and 25 deletions

View File

@ -369,10 +369,8 @@ int cache_tree_update(struct cache_tree *it,
return 0; return 0;
} }
static void write_one(struct cache_tree *it, static void write_one(struct strbuf *buffer, struct cache_tree *it,
char *path, const char *path, int pathlen)
int pathlen,
struct strbuf *buffer)
{ {
int i; int i;
@ -407,20 +405,13 @@ static void write_one(struct cache_tree *it,
prev->name, prev->namelen) <= 0) prev->name, prev->namelen) <= 0)
die("fatal - unsorted cache subtree"); 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]; write_one(sb, root, "", 0);
struct strbuf buffer;
path[0] = 0;
strbuf_init(&buffer, 0);
write_one(root, path, 0, &buffer);
*size_p = buffer.len;
return strbuf_detach(&buffer);
} }
static struct cache_tree *read_one(const char **buffer, unsigned long *size_p) static struct cache_tree *read_one(const char **buffer, unsigned long *size_p)

View File

@ -22,7 +22,7 @@ void cache_tree_free(struct cache_tree **);
void cache_tree_invalidate_path(struct cache_tree *, const char *); void cache_tree_invalidate_path(struct cache_tree *, const char *);
struct cache_tree_sub *cache_tree_sub(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); struct cache_tree *cache_tree_read(const char *buffer, unsigned long size);
int cache_tree_fully_valid(struct cache_tree *); int cache_tree_fully_valid(struct cache_tree *);

View File

@ -1136,7 +1136,7 @@ int write_index(struct index_state *istate, int newfd)
{ {
SHA_CTX c; SHA_CTX c;
struct cache_header hdr; struct cache_header hdr;
int i, removed; int i, err, removed;
struct cache_entry **cache = istate->cache; struct cache_entry **cache = istate->cache;
int entries = istate->cache_nr; int entries = istate->cache_nr;
@ -1165,16 +1165,15 @@ int write_index(struct index_state *istate, int newfd)
/* Write extension data here */ /* Write extension data here */
if (istate->cache_tree) { if (istate->cache_tree) {
unsigned long sz; struct strbuf sb;
void *data = cache_tree_write(istate->cache_tree, &sz);
if (data && strbuf_init(&sb, 0);
!write_index_ext_header(&c, newfd, CACHE_EXT_TREE, sz) && cache_tree_write(&sb, istate->cache_tree);
!ce_write(&c, newfd, data, sz)) err = write_index_ext_header(&c, newfd, CACHE_EXT_TREE, sb.len) < 0
free(data); || ce_write(&c, newfd, sb.buf, sb.len) < 0;
else { strbuf_release(&sb);
free(data); if (err)
return -1; return -1;
}
} }
return ce_flush(&c, newfd); return ce_flush(&c, newfd);
} }