Tweak the line_buffer API to permit seeking and cat-ing segments longer than 4 GiB. This would be particularly useful for applying deltas that remove a large segment from the middle of a file. Callers would still have to be updated to take advantage of this. Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> --- Since off_t is a signed type, on systems with 32-bit file offsets, this might make things worse. Is that worth worrying about? vcs-svn/line_buffer.c | 8 ++++---- vcs-svn/line_buffer.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/vcs-svn/line_buffer.c b/vcs-svn/line_buffer.c index 999368b..fd1d3c3 100644 --- a/vcs-svn/line_buffer.c +++ b/vcs-svn/line_buffer.c @@ -56,7 +56,7 @@ char *buffer_read_string(struct line_buffer *buf, uint32_t len) return ferror(buf->infile) ? NULL : buf->blob_buffer.buf; } -void buffer_copy_bytes(struct line_buffer *buf, uint32_t len) +void buffer_copy_bytes(struct line_buffer *buf, off_t len) { char byte_buffer[COPY_BUFFER_LEN]; uint32_t in; @@ -72,12 +72,12 @@ void buffer_copy_bytes(struct line_buffer *buf, uint32_t len) } } -uint32_t buffer_skip_bytes(struct line_buffer *buf, uint32_t nbytes) +off_t buffer_skip_bytes(struct line_buffer *buf, off_t nbytes) { - uint32_t done = 0; + off_t done = 0; while (done < nbytes && !feof(buf->infile) && !ferror(buf->infile)) { char byte_buffer[COPY_BUFFER_LEN]; - uint32_t len = nbytes - done; + off_t len = nbytes - done; uint32_t in = len < COPY_BUFFER_LEN ? len : COPY_BUFFER_LEN; done += fread(byte_buffer, 1, in, buf->infile); } diff --git a/vcs-svn/line_buffer.h b/vcs-svn/line_buffer.h index 2796ba7..2849faa 100644 --- a/vcs-svn/line_buffer.h +++ b/vcs-svn/line_buffer.h @@ -16,8 +16,8 @@ int buffer_init(struct line_buffer *buf, const char *filename); int buffer_deinit(struct line_buffer *buf); char *buffer_read_line(struct line_buffer *buf); char *buffer_read_string(struct line_buffer *buf, uint32_t len); -void buffer_copy_bytes(struct line_buffer *buf, uint32_t len); -uint32_t buffer_skip_bytes(struct line_buffer *buf, uint32_t len); +void buffer_copy_bytes(struct line_buffer *buf, off_t len); +off_t buffer_skip_bytes(struct line_buffer *buf, off_t len); void buffer_reset(struct line_buffer *buf); #endif -- 1.7.2.3 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html