From 05a62d1a8264e724e8353684de60b46eb6853cbb Mon Sep 17 00:00:00 2001 From: "Kirill A. Shutemov" Date: Mon, 18 Jul 2011 05:11:18 +0300 Subject: [PATCH] filebuf: update git_filebuf.write signature to take non-const buffer z_stream.next_in is non-const. Although currently Zlib doesn't modify buffer content on deflate(), it might be change in the future. gzwrite() already modify it. To avoid this let's change signature of git_filebuf.write and rework git_filebuf_write() accordingly. Signed-off-by: Kirill A. Shutemov --- src/filebuf.c | 25 +++++++------------------ src/filebuf.h | 3 +-- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/src/filebuf.c b/src/filebuf.c index 1fbbaa3d4..6d398a7db 100644 --- a/src/filebuf.c +++ b/src/filebuf.c @@ -97,7 +97,7 @@ GIT_INLINE(int) flush_buffer(git_filebuf *file) return result; } -static int write_normal(git_filebuf *file, const void *source, size_t len) +static int write_normal(git_filebuf *file, void *source, size_t len) { int result = 0; @@ -110,7 +110,7 @@ static int write_normal(git_filebuf *file, const void *source, size_t len) return result; } -static int write_deflate(git_filebuf *file, const void *source, size_t len) +static int write_deflate(git_filebuf *file, void *source, size_t len) { int result = Z_OK; z_stream *zs = &file->zs; @@ -315,24 +315,13 @@ int git_filebuf_write(git_filebuf *file, const void *buff, size_t len) return GIT_SUCCESS; } - /* flush the cache if it doesn't fit */ - if (file->buf_pos > 0) { - add_to_cache(file, buf, space_left); + add_to_cache(file, buf, space_left); - if ((error = flush_buffer(file)) < GIT_SUCCESS) - return git__rethrow(error, "Failed to write to buffer"); + if ((error = flush_buffer(file)) < GIT_SUCCESS) + return git__rethrow(error, "Failed to write to buffer"); - len -= space_left; - buf += space_left; - } - - /* write too-large chunks immediately */ - if (len > file->buf_size) { - error = file->write(file, buf, len); - if (error < GIT_SUCCESS) - return git__rethrow(error, "Failed to write to buffer"); - return GIT_SUCCESS; - } + len -= space_left; + buf += space_left; } } diff --git a/src/filebuf.h b/src/filebuf.h index 1567b115c..9154cabcd 100644 --- a/src/filebuf.h +++ b/src/filebuf.h @@ -22,8 +22,7 @@ struct git_filebuf { char *path_original; char *path_lock; - int (*write)(struct git_filebuf *file, - const void *source, size_t len); + int (*write)(struct git_filebuf *file, void *source, size_t len); git_hash_ctx *digest;