diff options
Diffstat (limited to 'src/fileops.c')
-rw-r--r-- | src/fileops.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/fileops.c b/src/fileops.c index 9bef02847..cfc22bb53 100644 --- a/src/fileops.c +++ b/src/fileops.c @@ -153,14 +153,15 @@ int git_futils_readbuffer_fd(git_buf *buf, git_file fd, size_t len) } int git_futils_readbuffer_updated( - git_buf *buf, const char *path, git_oid *checksum, int *updated) + git_buf *out, const char *path, git_oid *checksum, int *updated) { int error; git_file fd; struct stat st; + git_buf buf = GIT_BUF_INIT; git_oid checksum_new; - assert(buf && path && *path); + assert(out && path && *path); if (updated != NULL) *updated = 0; @@ -182,15 +183,15 @@ int git_futils_readbuffer_updated( if ((fd = git_futils_open_ro(path)) < 0) return fd; - if (git_futils_readbuffer_fd(buf, fd, (size_t)st.st_size) < 0) { + if (git_futils_readbuffer_fd(&buf, fd, (size_t)st.st_size) < 0) { p_close(fd); return -1; } p_close(fd); - if ((error = git_hash_buf(&checksum_new, buf->ptr, buf->size)) < 0) { - git_buf_free(buf); + if ((error = git_hash_buf(&checksum_new, buf.ptr, buf.size)) < 0) { + git_buf_free(&buf); return error; } @@ -198,7 +199,7 @@ int git_futils_readbuffer_updated( * If we were given a checksum, we only want to use it if it's different */ if (checksum && !git_oid__cmp(checksum, &checksum_new)) { - git_buf_free(buf); + git_buf_free(&buf); if (updated) *updated = 0; @@ -214,6 +215,9 @@ int git_futils_readbuffer_updated( if (updated != NULL) *updated = 1; + git_buf_swap(out, &buf); + git_buf_free(&buf); + return 0; } |