Commit 05a62d1a by Kirill A. Shutemov Committed by Vicent Marti

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 <kirill@shutemov.name>
parent 76159921
......@@ -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");
len -= space_left;
buf += space_left;
}
if ((error = flush_buffer(file)) < GIT_SUCCESS)
return git__rethrow(error, "Failed to write to buffer");
/* 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;
}
}
......
......@@ -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;
......
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