git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Patrick Steinhardt <ps@pks.im>
To: Jeff King <peff@peff.net>
Cc: Git List <git@vger.kernel.org>,
	Junio C Hamano <gitster@pobox.com>,
	Wink Saville <wink@saville.com>
Subject: Re: [PATCH 08/14] tree-diff: pass whole path string to path_appendnew()
Date: Mon, 13 Jan 2025 16:40:00 +0100	[thread overview]
Message-ID: <Z4UzyFqao8Ty_RQb@pks.im> (raw)
In-Reply-To: <20250109084907.GH2748836@coredump.intra.peff.net>

On Thu, Jan 09, 2025 at 03:49:07AM -0500, Jeff King wrote:
> diff --git a/tree-diff.c b/tree-diff.c
> index 22fc2d8f8c..d2f8dd14a6 100644
> --- a/tree-diff.c
> +++ b/tree-diff.c
> @@ -129,20 +129,18 @@ static int emit_diff_first_parent_only(struct diff_options *opt, struct combine_
>   * 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,

Sneaky, you also changed the type of `len` :) You might want to point
that out in the commit message.

>  	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);
>  	p->next = NULL;
>  	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());
> @@ -206,7 +204,10 @@ static struct combine_diff_path *emit_path(struct combine_diff_path *p,
>  	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) {
>  			/*

Makes sense. And there is a single caller of `path_appendnew()`, only,
so no further changes should be required.

Patrick

  reply	other threads:[~2025-01-13 15:40 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-03 19:28 [BUGREPORT] git diff-tree --cc SEGFAUTs Wink Saville
2025-01-03 20:46 ` Jeff King
2025-01-03 23:34   ` Wink Saville
2025-01-04  0:31     ` Jeff King
2025-01-04  2:55       ` Junio C Hamano
2025-01-04  3:32         ` Jeff King
2025-01-04 18:09           ` Wink Saville
2025-01-05 22:13             ` Wink Saville
2025-01-09  8:27           ` [PATCH 0/14] combine-diff cleanups Jeff King
2025-01-09  8:28             ` [PATCH 01/14] run_diff_files(): delay allocation of combine_diff_path Jeff King
2025-01-09 17:57               ` Junio C Hamano
2025-01-09  8:32             ` [PATCH 02/14] combine-diff: add combine_diff_path_new() Jeff King
2025-01-09 18:05               ` Junio C Hamano
2025-01-13 15:40               ` Patrick Steinhardt
2025-01-14  9:29                 ` Jeff King
2025-01-09  8:33             ` [PATCH 03/14] tree-diff: clear parent array in path_appendnew() Jeff King
2025-01-09 18:28               ` Junio C Hamano
2025-01-10 10:54                 ` Jeff King
2025-01-09  8:42             ` [PATCH 04/14] combine-diff: use pointer for parent paths Jeff King
2025-01-09 18:49               ` Junio C Hamano
2025-01-09  8:42             ` [PATCH 05/14] diff: add a comment about combine_diff_path.parent.path Jeff King
2025-01-13 15:40               ` Patrick Steinhardt
2025-01-09  8:44             ` [PATCH 06/14] run_diff_files(): de-mystify the size of combine_diff_path struct Jeff King
2025-01-10 16:40               ` Junio C Hamano
2025-01-09  8:46             ` [PATCH 07/14] tree-diff: drop path_appendnew() alloc optimization Jeff King
2025-01-13 15:40               ` Patrick Steinhardt
2025-01-14 10:30                 ` Jeff King
2025-01-09  8:49             ` [PATCH 08/14] tree-diff: pass whole path string to path_appendnew() Jeff King
2025-01-13 15:40               ` Patrick Steinhardt [this message]
2025-01-14  9:26                 ` Jeff King
2025-01-09  8:49             ` [PATCH 09/14] tree-diff: inline path_appendnew() Jeff King
2025-01-11  0:41               ` Junio C Hamano
2025-01-09  8:50             ` [PATCH 10/14] combine-diff: drop public declaration of combine_diff_path_size() Jeff King
2025-01-09  8:51             ` [PATCH 11/14] tree-diff: drop list-tail argument to diff_tree_paths() Jeff King
2025-01-18  0:33               ` Junio C Hamano
2025-01-09  8:53             ` [PATCH 12/14] tree-diff: use the name "tail" to refer to list tail Jeff King
2025-01-09  8:54             ` [PATCH 13/14] tree-diff: simplify emit_path() list management Jeff King
2025-01-09  8:57             ` [PATCH 14/14] tree-diff: make list tail-passing more explicit Jeff King

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Z4UzyFqao8Ty_RQb@pks.im \
    --to=ps@pks.im \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    --cc=wink@saville.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).