mirror of
https://git.proxmox.com/git/libgit2
synced 2026-01-08 12:45:20 +00:00
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.
This commit is contained in:
parent
eb5977991a
commit
3547b122b5
@ -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;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user