mktree: Simplify write_tree() using strbuf API

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Pierre Habouzit 2007-09-06 13:20:08 +02:00 committed by Junio C Hamano
parent 4a241d79c9
commit d52bc66152
1 changed files with 8 additions and 15 deletions

View File

@ -44,30 +44,23 @@ static int ent_compare(const void *a_, const void *b_)


static void write_tree(unsigned char *sha1) static void write_tree(unsigned char *sha1)
{ {
char *buffer; struct strbuf buf;
unsigned long size, offset; size_t size;
int i; int i;


qsort(entries, used, sizeof(*entries), ent_compare); qsort(entries, used, sizeof(*entries), ent_compare);
for (size = i = 0; i < used; i++) for (size = i = 0; i < used; i++)
size += 32 + entries[i]->len; size += 32 + entries[i]->len;
buffer = xmalloc(size); strbuf_init(&buf);
offset = 0; strbuf_grow(&buf, size);


for (i = 0; i < used; i++) { for (i = 0; i < used; i++) {
struct treeent *ent = entries[i]; struct treeent *ent = entries[i];

strbuf_addf(&buf, "%o %s%c", ent->mode, ent->name, '\0');
if (offset + ent->len + 100 < size) { strbuf_add(&buf, ent->sha1, 20);
size = alloc_nr(offset + ent->len + 100);
buffer = xrealloc(buffer, size);
}
offset += sprintf(buffer + offset, "%o ", ent->mode);
offset += sprintf(buffer + offset, "%s", ent->name);
buffer[offset++] = 0;
hashcpy((unsigned char*)buffer + offset, ent->sha1);
offset += 20;
} }
write_sha1_file(buffer, offset, tree_type, sha1);
write_sha1_file(buf.buf, buf.len, tree_type, sha1);
} }


static const char mktree_usage[] = "git-mktree [-z]"; static const char mktree_usage[] = "git-mktree [-z]";