* and append it to paths list tail.
*/
static struct combine_diff_path *path_appendnew(struct combine_diff_path *last,
- int nparent, const struct strbuf *base, const char *path, int pathlen,
+ int nparent, const char *path, size_t len,
unsigned mode, const struct object_id *oid)
{
struct combine_diff_path *p;
- size_t len = st_add(base->len, pathlen);
size_t alloclen = combine_diff_path_size(nparent, len);
p = xmalloc(alloclen);
last->next = p;
p->path = (char *)&(p->parent[nparent]);
- memcpy(p->path, base->buf, base->len);
- memcpy(p->path + base->len, path, pathlen);
+ memcpy(p->path, path, len);
p->path[len] = 0;
p->mode = mode;
oidcpy(&p->oid, oid ? oid : null_oid());
if (emitthis) {
int keep;
struct combine_diff_path *pprev = p;
- p = path_appendnew(p, nparent, base, path, pathlen, mode, oid);
+
+ strbuf_add(base, path, pathlen);
+ p = path_appendnew(p, nparent, base->buf, base->len, mode, oid);
+ strbuf_setlen(base, old_baselen);
for (i = 0; i < nparent; ++i) {
/*