Commit 3547b122 by Carlos Martín Nieto

filebuf: use an internal buffer

This reduces the chances of a crash in the thread tests. This shouldn't
affect general usage too much, since the main usage of these functions
are to read into an empty buffer.
parent eb597799
...@@ -153,14 +153,15 @@ int git_futils_readbuffer_fd(git_buf *buf, git_file fd, size_t len) ...@@ -153,14 +153,15 @@ int git_futils_readbuffer_fd(git_buf *buf, git_file fd, size_t len)
} }
int git_futils_readbuffer_updated( 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; int error;
git_file fd; git_file fd;
struct stat st; struct stat st;
git_buf buf = GIT_BUF_INIT;
git_oid checksum_new; git_oid checksum_new;
assert(buf && path && *path); assert(out && path && *path);
if (updated != NULL) if (updated != NULL)
*updated = 0; *updated = 0;
...@@ -182,15 +183,15 @@ int git_futils_readbuffer_updated( ...@@ -182,15 +183,15 @@ int git_futils_readbuffer_updated(
if ((fd = git_futils_open_ro(path)) < 0) if ((fd = git_futils_open_ro(path)) < 0)
return fd; 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); p_close(fd);
return -1; return -1;
} }
p_close(fd); p_close(fd);
if ((error = git_hash_buf(&checksum_new, buf->ptr, buf->size)) < 0) { if ((error = git_hash_buf(&checksum_new, buf.ptr, buf.size)) < 0) {
git_buf_free(buf); git_buf_free(&buf);
return error; return error;
} }
...@@ -198,7 +199,7 @@ int git_futils_readbuffer_updated( ...@@ -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 we were given a checksum, we only want to use it if it's different
*/ */
if (checksum && !git_oid__cmp(checksum, &checksum_new)) { if (checksum && !git_oid__cmp(checksum, &checksum_new)) {
git_buf_free(buf); git_buf_free(&buf);
if (updated) if (updated)
*updated = 0; *updated = 0;
...@@ -214,6 +215,9 @@ int git_futils_readbuffer_updated( ...@@ -214,6 +215,9 @@ int git_futils_readbuffer_updated(
if (updated != NULL) if (updated != NULL)
*updated = 1; *updated = 1;
git_buf_swap(out, &buf);
git_buf_free(&buf);
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment