diff-tree: convert base+baselen to writable strbuf
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Wed, 15 Dec 2010 15:02:42 +0000 (22:02 +0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 3 Feb 2011 22:08:16 +0000 (14:08 -0800)
commit48932677d62e426b3f26ac236384cb5195fb9dfd
treed58115641e35cc305af9b5f48e6fcf39f5cfee35
parent3bd2bcfa982c69c0f5722c3dfe72b15cd0469d15
diff-tree: convert base+baselen to writable strbuf

In traversing trees, a full path is splitted into two parts: base
directory and entry. They are however quite often concatenated
whenever a full path is needed. Current code allocates a new buffer,
do two memcpy(), use it, then release.

Instead this patch turns "base" to a writable, extendable buffer. When
a concatenation is needed, the callee only needs to append "entry" to
base, use it, then truncate the entry out again. "base" must remain
unchanged before and after entering a function.

This avoids quite a bit of malloc() and memcpy().

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
tree-diff.c
tree-walk.c
tree-walk.h