summaryrefslogtreecommitdiff
path: root/refs
diff options
context:
space:
mode:
authorBen Peart <Ben.Peart@microsoft.com>2018-07-10 21:08:22 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-07-10 21:22:44 (GMT)
commit80a6c2073b4d90be3e1be21f86afe7a47d1ac7bc (patch)
tree3268229219296b7b7051066ee339ba8454bf6ba4 /refs
parente3331758f12da22f4103eec7efe1b5304a9be5e9 (diff)
downloadgit-80a6c2073b4d90be3e1be21f86afe7a47d1ac7bc.zip
git-80a6c2073b4d90be3e1be21f86afe7a47d1ac7bc.tar.gz
git-80a6c2073b4d90be3e1be21f86afe7a47d1ac7bc.tar.bz2
convert log_ref_write_fd() to use strbuf
Since we don't care about how many bytes were written, simplify the return value logic. log_ref_write_fd() was written long before strbuf was fleshed out. Remove the old manual buffer management code and replace it with strbuf(). Also update copy_reflog_msg() which is called only by log_ref_write_fd() to use strbuf as it keeps things consistent. Signed-off-by: Ben Peart <Ben.Peart@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs')
-rw-r--r--refs/files-backend.c29
-rw-r--r--refs/refs-internal.h7
2 files changed, 13 insertions, 23 deletions
diff --git a/refs/files-backend.c b/refs/files-backend.c
index a9a066d..054306d 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;
}
static int files_log_ref_write(struct files_ref_store *refs,
diff --git a/refs/refs-internal.h b/refs/refs-internal.h
index dd83431..17a5260 100644
--- a/refs/refs-internal.h
+++ b/refs/refs-internal.h
@@ -91,11 +91,10 @@ enum peel_status {
enum peel_status peel_object(const struct object_id *name, struct object_id *oid);
/*
- * Copy the reflog message msg to buf, which has been allocated sufficiently
- * large, while cleaning up the whitespaces. Especially, convert LF to space,
- * because reflog file is one line per entry.
+ * Copy the reflog message msg to sb while cleaning up the whitespaces.
+ * Especially, convert LF to space, because reflog file is one line per entry.
*/
-int copy_reflog_msg(char *buf, const char *msg);
+void copy_reflog_msg(struct strbuf *sb, const char *msg);
/**
* Information needed for a single ref update. Set new_oid to the new