Show changes to refs/files-backend.c +29 −37
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 4f25932..49713b3 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -2591,39 +2591,38 @@ static int open_or_create_logfile(const char *path, void *cb)
}
/*
- * Create a reflog for a ref. Store its path to *logfile. If
- * force_create = 0, only create the reflog for certain refs (those
- * for which should_autocreate_reflog returns non-zero). Otherwise,
- * create it regardless of the reference name. If the logfile already
- * existed or was created, return 0 and set *logfd to the file
- * descriptor opened for appending to the file. If no logfile exists
- * and we decided not to create one, return 0 and set *logfd to -1. On
- * failure, fill in *err and return -1.
+ * Create a reflog for a ref. If force_create = 0, only create the
+ * reflog for certain refs (those for which should_autocreate_reflog
+ * returns non-zero). Otherwise, create it regardless of the reference
+ * name. If the logfile already existed or was created, return 0 and
+ * set *logfd to the file descriptor opened for appending to the file.
+ * If no logfile exists and we decided not to create one, return 0 and
+ * set *logfd to -1. On failure, fill in *err and return -1.
*/
-static int log_ref_setup(const char *refname,
- struct strbuf *logfile, int *logfd,
- struct strbuf *err, int force_create)
+static int log_ref_setup(const char *refname, int force_create,
+ int *logfd, struct strbuf *err)
{
- strbuf_git_path(logfile, "logs/%s", refname);
+ char *logfile = git_pathdup("logs/%s", refname);
+ int ret = 0;
if (force_create || should_autocreate_reflog(refname)) {
- if (raceproof_create_file(logfile->buf, open_or_create_logfile, logfd) < 0) {
+ if (raceproof_create_file(logfile, open_or_create_logfile, logfd) < 0) {
if (errno == ENOENT) {
strbuf_addf(err, "unable to create directory for %s: "
- "%s", logfile->buf, strerror(errno));
+ "%s", logfile, strerror(errno));
} else if (errno == EISDIR) {
strbuf_addf(err, "there are still logs under %s",
- logfile->buf);
+ logfile);
} else {
strbuf_addf(err, "unable to append to %s: %s",
- logfile->buf, strerror(errno));
+ logfile, strerror(errno));
}
- return -1;
+ ret = -1;
} else {
- adjust_shared_perm(logfile->buf);
+ adjust_shared_perm(logfile);
}
} else {
- *logfd = open(logfile->buf, O_APPEND | O_WRONLY, 0666);
+ *logfd = open(logfile, O_APPEND | O_WRONLY, 0666);
if (*logfd < 0) {
if (errno == ENOENT || errno == EISDIR) {
/*
@@ -2634,27 +2633,25 @@ static int log_ref_setup(const char *refname,
*/
} else {
strbuf_addf(err, "unable to append to %s: %s",
- logfile->buf, strerror(errno));
- return -1;
+ logfile, strerror(errno));
+ ret = -1;
}
} else {
- adjust_shared_perm(logfile->buf);
+ adjust_shared_perm(logfile);
}
}
- return 0;
+ free(logfile);
+ return ret;
}
int safe_create_reflog(const char *refname, int force_create, struct strbuf *err)
{
- int ret;
- struct strbuf sb = STRBUF_INIT;
- int fd;
+ int ret, fd;
- ret = log_ref_setup(refname, &sb, &fd, err, force_create);
+ ret = log_ref_setup(refname, force_create, &fd, err);
if (!ret && fd >= 0)
close(fd);
- strbuf_release(&sb);
return ret;
}
@@ -2686,16 +2683,15 @@ static int log_ref_write_fd(int fd, const unsigned char *old_sha1,
static int log_ref_write_1(const char *refname, const unsigned char *old_sha1,
const unsigned char *new_sha1, const char *msg,
- struct strbuf *logfile, int flags,
- struct strbuf *err)
+ int flags, struct strbuf *err)
{
int logfd, result;
if (log_all_ref_updates < 0)
log_all_ref_updates = !is_bare_repository();
- result = log_ref_setup(refname, logfile, &logfd, err,
- flags & REF_FORCE_CREATE_REFLOG);
+ result = log_ref_setup(refname, flags & REF_FORCE_CREATE_REFLOG,
+ &logfd, err);
if (result)
return result;
@@ -2730,11 +2726,7 @@ int files_log_ref_write(const char *refname, const unsigned char *old_sha1,
const unsigned char *new_sha1, const char *msg,
int flags, struct strbuf *err)
{
- struct strbuf sb = STRBUF_INIT;
- int ret = log_ref_write_1(refname, old_sha1, new_sha1, msg, &sb, flags,
- err);
- strbuf_release(&sb);
- return ret;
+ return log_ref_write_1(refname, old_sha1, new_sha1, msg, flags, err);
}
/*