summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2017-04-27 03:27:17 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-04-27 05:38:55 (GMT)
commit2e2bbb9624e10537560c3ac45ff6820ff773b3d6 (patch)
tree71bd4bdda3292666974f4c7d456003e3e7b5e735
parentf131db9e3166c528d3b0352b653eb0d9deca5a65 (diff)
downloadgit-2e2bbb9624e10537560c3ac45ff6820ff773b3d6.zip
git-2e2bbb9624e10537560c3ac45ff6820ff773b3d6.tar.gz
git-2e2bbb9624e10537560c3ac45ff6820ff773b3d6.tar.bz2
am: simplify allocations in get_commit_info()
After we call split_ident_line(), we have several begin/end pairs for various parts of the ident. We then copy each into a strbuf to create a single string, and then detach that string. We can instead skip the strbuf entirely and just duplicate the strings directly. This is shorter, and it makes it more obvious that we are not leaking the strbuf (we were not before, because every code path either died or hit a strbuf_detach). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/am.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/builtin/am.c b/builtin/am.c
index 8dfe8f8..17f394c 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -1376,40 +1376,35 @@ static int get_mail_commit_oid(struct object_id *commit_id, const char *mail)
*/
static void get_commit_info(struct am_state *state, struct commit *commit)
{
- const char *buffer, *ident_line, *author_date, *msg;
+ const char *buffer, *ident_line, *msg;
size_t ident_len;
struct ident_split ident_split;
- struct strbuf sb = STRBUF_INIT;
buffer = logmsg_reencode(commit, NULL, get_commit_output_encoding());
ident_line = find_commit_header(buffer, "author", &ident_len);
- if (split_ident_line(&ident_split, ident_line, ident_len) < 0) {
- strbuf_add(&sb, ident_line, ident_len);
- die(_("invalid ident line: %s"), sb.buf);
- }
+ if (split_ident_line(&ident_split, ident_line, ident_len) < 0)
+ die(_("invalid ident line: %.*s"), (int)ident_len, ident_line);
assert(!state->author_name);
if (ident_split.name_begin) {
- strbuf_add(&sb, ident_split.name_begin,
- ident_split.name_end - ident_split.name_begin);
- state->author_name = strbuf_detach(&sb, NULL);
+ state->author_name =
+ xmemdupz(ident_split.name_begin,
+ ident_split.name_end - ident_split.name_begin);
} else
state->author_name = xstrdup("");
assert(!state->author_email);
if (ident_split.mail_begin) {
- strbuf_add(&sb, ident_split.mail_begin,
- ident_split.mail_end - ident_split.mail_begin);
- state->author_email = strbuf_detach(&sb, NULL);
+ state->author_email =
+ xmemdupz(ident_split.mail_begin,
+ ident_split.mail_end - ident_split.mail_begin);
} else
state->author_email = xstrdup("");
- author_date = show_ident_date(&ident_split, DATE_MODE(NORMAL));
- strbuf_addstr(&sb, author_date);
assert(!state->author_date);
- state->author_date = strbuf_detach(&sb, NULL);
+ state->author_date = xstrdup(show_ident_date(&ident_split, DATE_MODE(NORMAL)));
assert(!state->msg);
msg = strstr(buffer, "\n\n");