Commit 3fa764edd2a11691876153fef6523375b6e4553d

Carlos Martín Nieto 2015-11-04T09:20:14

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.

diff --git a/src/filebuf.c b/src/filebuf.c
index 101d508..6eee530 100644
--- a/src/filebuf.c
+++ b/src/filebuf.c
@@ -273,6 +273,11 @@ cleanup:
 
 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;
 	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
 	if (flags & GIT_FILEBUF_DO_NOT_BUFFER)
 		file->do_not_buffer = true;
 
-	file->buf_size = WRITE_BUFFER_SIZE;
+	file->buf_size = size;
 	file->buf_pos = 0;
 	file->fd = -1;
 	file->last_error = BUFERR_OK;
diff --git a/src/filebuf.h b/src/filebuf.h
index f4d255b..467708d 100644
--- a/src/filebuf.h
+++ b/src/filebuf.h
@@ -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_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_at(git_filebuf *lock, const char *path);
 void git_filebuf_cleanup(git_filebuf *lock);