Commit 3fa764ed by Carlos Martín Nieto

filebuf: allow using a custom buffer size

Allow setting the buffer size on open in order to use this data
structure more generally as a spill buffer, with larger buffer sizes for
specific use-cases.
parent e50a49ee
...@@ -273,6 +273,11 @@ cleanup: ...@@ -273,6 +273,11 @@ cleanup:
int git_filebuf_open(git_filebuf *file, const char *path, int flags, mode_t mode) int git_filebuf_open(git_filebuf *file, const char *path, int flags, mode_t mode)
{ {
return git_filebuf_open_withsize(file, path, flags, mode, WRITE_BUFFER_SIZE);
}
int git_filebuf_open_withsize(git_filebuf *file, const char *path, int flags, mode_t mode, size_t size)
{
int compression, error = -1; int compression, error = -1;
size_t path_len, alloc_len; size_t path_len, alloc_len;
...@@ -286,7 +291,7 @@ int git_filebuf_open(git_filebuf *file, const char *path, int flags, mode_t mode ...@@ -286,7 +291,7 @@ int git_filebuf_open(git_filebuf *file, const char *path, int flags, mode_t mode
if (flags & GIT_FILEBUF_DO_NOT_BUFFER) if (flags & GIT_FILEBUF_DO_NOT_BUFFER)
file->do_not_buffer = true; file->do_not_buffer = true;
file->buf_size = WRITE_BUFFER_SIZE; file->buf_size = size;
file->buf_pos = 0; file->buf_pos = 0;
file->fd = -1; file->fd = -1;
file->last_error = BUFERR_OK; file->last_error = BUFERR_OK;
......
...@@ -79,6 +79,7 @@ int git_filebuf_reserve(git_filebuf *file, void **buff, size_t len); ...@@ -79,6 +79,7 @@ int git_filebuf_reserve(git_filebuf *file, void **buff, size_t len);
int git_filebuf_printf(git_filebuf *file, const char *format, ...) GIT_FORMAT_PRINTF(2, 3); int git_filebuf_printf(git_filebuf *file, const char *format, ...) GIT_FORMAT_PRINTF(2, 3);
int git_filebuf_open(git_filebuf *lock, const char *path, int flags, mode_t mode); int git_filebuf_open(git_filebuf *lock, const char *path, int flags, mode_t mode);
int git_filebuf_open_withsize(git_filebuf *file, const char *path, int flags, mode_t mode, size_t size);
int git_filebuf_commit(git_filebuf *lock); int git_filebuf_commit(git_filebuf *lock);
int git_filebuf_commit_at(git_filebuf *lock, const char *path); int git_filebuf_commit_at(git_filebuf *lock, const char *path);
void git_filebuf_cleanup(git_filebuf *lock); void git_filebuf_cleanup(git_filebuf *lock);
......
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