Ben Peart <Ben.Peart@xxxxxxxxxxxxx> writes: > diff --git a/refs/files-backend.c b/refs/files-backend.c > index a9a066dcfb..054306d779 100644 > --- a/refs/files-backend.c > +++ b/refs/files-backend.c > @@ -1582,26 +1582,17 @@ static int log_ref_write_fd(int fd, const struct object_id *old_oid, > const struct object_id *new_oid, > const char *committer, const char *msg) > { > - int msglen, written; > - unsigned maxlen, len; > - char *logrec; > - > - msglen = msg ? strlen(msg) : 0; > - maxlen = strlen(committer) + msglen + 100; > - logrec = xmalloc(maxlen); > - len = xsnprintf(logrec, maxlen, "%s %s %s\n", > - oid_to_hex(old_oid), > - oid_to_hex(new_oid), > - committer); > - if (msglen) > - len += copy_reflog_msg(logrec + len - 1, msg) - 1; > - > - written = len <= maxlen ? write_in_full(fd, logrec, len) : -1; > - free(logrec); > - if (written < 0) > - return -1; > + struct strbuf sb = STRBUF_INIT; > + int ret = 0; > > - return 0; > + strbuf_addf(&sb, "%s %s %s", oid_to_hex(old_oid), oid_to_hex(new_oid), committer); > + if (msg && *msg) > + copy_reflog_msg(&sb, msg); > + strbuf_addch(&sb, '\n'); > + if (write_in_full(fd, sb.buf, sb.len) < 0) > + ret = -1; > + strbuf_release(&sb); > + return ret; Nicely plugged here. Looks quite sensible.