[PATCH 2/4] vcs-svn: make buffer_skip_bytes return length read
flat view
STALE3768d
From: Jonathan Nieder <hidden>
Date: 2016-06-15 22:50:18
Subsystem:
the rest · Maintainer:
Linus Torvalds
Date: Sun, 10 Oct 2010 21:44:21 -0500 Currently there is no way to detect when input ended if it ended early during buffer_skip_bytes. Tell the calling program how many bytes were actually skipped for easier debugging. Existing callers will still ignore early EOF. Signed-off-by: Jonathan Nieder <redacted> --- vcs-svn/line_buffer.c | 13 +++++++------ vcs-svn/line_buffer.h | 2 +- vcs-svn/line_buffer.txt | 3 ++- 3 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/vcs-svn/line_buffer.c b/vcs-svn/line_buffer.c
index 1b5ac8a..58e076f 100644
--- a/vcs-svn/line_buffer.c
+++ b/vcs-svn/line_buffer.c@@ -86,14 +86,15 @@ void buffer_copy_bytes(uint32_t len) } } -void buffer_skip_bytes(uint32_t len) +uint32_t buffer_skip_bytes(uint32_t nbytes) { - uint32_t in; - while (len > 0 && !feof(infile) && !ferror(infile)) { - in = len < COPY_BUFFER_LEN ? len : COPY_BUFFER_LEN; - in = fread(byte_buffer, 1, in, infile); - len -= in; + uint32_t done = 0; + while (done < nbytes && !feof(infile) && !ferror(infile)) { + uint32_t len = nbytes - done; + uint32_t in = len < COPY_BUFFER_LEN ? len : COPY_BUFFER_LEN; + done += fread(byte_buffer, 1, in, infile); } + return done; } void buffer_reset(void)
diff --git a/vcs-svn/line_buffer.h b/vcs-svn/line_buffer.h
index 5a19873..b9dd929 100644
--- a/vcs-svn/line_buffer.h
+++ b/vcs-svn/line_buffer.h@@ -7,7 +7,7 @@ int buffer_ferror(void); char *buffer_read_line(void); char *buffer_read_string(uint32_t len); void buffer_copy_bytes(uint32_t len); -void buffer_skip_bytes(uint32_t len); +uint32_t buffer_skip_bytes(uint32_t len); void buffer_reset(void); #endif
diff --git a/vcs-svn/line_buffer.txt b/vcs-svn/line_buffer.txt
index 8906fb1..a08ad8a 100644
--- a/vcs-svn/line_buffer.txt
+++ b/vcs-svn/line_buffer.txt@@ -52,7 +52,8 @@ Functions `buffer_skip_bytes`:: Discards `len` bytes from the input stream (stopping early - if necessary because of an error or eof). + if necessary because of an error or eof). Return value is + the number of bytes successfully read. `buffer_reset`:: Deallocates non-static buffers.
--
1.7.2.3.554.gc9b5c.dirty