Skip to content

Commit

Permalink
diff_populate_gitlink: use a strbuf
Browse files Browse the repository at this point in the history
We allocate 100 bytes to hold the "Submodule commit ..."
text. This is enough, but it's not immediately obvious that
this is the case, and we have to repeat the magic 100 twice.

We could get away with xstrfmt here, but we want to know the
size, as well, so let's use a real strbuf. And while we're
here, we can clean up the logic around size_only. It
currently sets and clears the "data" field pointlessly, and
leaves the "should_free" flag on even after we have cleared
the data.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Feb 22, 2016
1 parent 21f9d0f commit b1ddfb9
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -2704,21 +2704,21 @@ static int reuse_worktree_file(const char *name, const unsigned char *sha1, int

static int diff_populate_gitlink(struct diff_filespec *s, int size_only)
{
int len;
char *data = xmalloc(100), *dirty = "";
struct strbuf buf = STRBUF_INIT;
char *dirty = "";

/* Are we looking at the work tree? */
if (s->dirty_submodule)
dirty = "-dirty";

len = snprintf(data, 100,
"Subproject commit %s%s\n", sha1_to_hex(s->sha1), dirty);
s->data = data;
s->size = len;
s->should_free = 1;
strbuf_addf(&buf, "Subproject commit %s%s\n", sha1_to_hex(s->sha1), dirty);
s->size = buf.len;
if (size_only) {
s->data = NULL;
free(data);
strbuf_release(&buf);
} else {
s->data = strbuf_detach(&buf, NULL);
s->should_free = 1;
}
return 0;
}
Expand Down

0 comments on commit b1ddfb9

Please sign in to comment.