Skip to content

Commit

Permalink
vcs-svn: make buffer_skip_bytes return length read
Browse files Browse the repository at this point in the history
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 <jrnieder@gmail.com>
Signed-off-by: David Barr <david.barr@cordelta.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
  • Loading branch information
Jonathan Nieder committed Mar 22, 2011
1 parent 93b709c commit d234f54
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 8 deletions.
13 changes: 7 additions & 6 deletions vcs-svn/line_buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,15 +120,16 @@ void buffer_copy_bytes(struct line_buffer *buf, off_t len)
}
}

void buffer_skip_bytes(struct line_buffer *buf, off_t len)
off_t buffer_skip_bytes(struct line_buffer *buf, off_t nbytes)
{
char byte_buffer[COPY_BUFFER_LEN];
uint32_t in;
while (len > 0 && !feof(buf->infile) && !ferror(buf->infile)) {
in = len < COPY_BUFFER_LEN ? len : COPY_BUFFER_LEN;
in = fread(byte_buffer, 1, in, buf->infile);
len -= in;
off_t done = 0;
while (done < nbytes && !feof(buf->infile) && !ferror(buf->infile)) {
off_t len = nbytes - done;
size_t in = len < COPY_BUFFER_LEN ? len : COPY_BUFFER_LEN;
done += fread(byte_buffer, 1, in, buf->infile);
}
return done;
}

void buffer_reset(struct line_buffer *buf)
Expand Down
2 changes: 1 addition & 1 deletion vcs-svn/line_buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@ char *buffer_read_string(struct line_buffer *buf, uint32_t len);
int buffer_read_char(struct line_buffer *buf);
void buffer_read_binary(struct line_buffer *buf, struct strbuf *sb, uint32_t len);
void buffer_copy_bytes(struct line_buffer *buf, off_t len);
void buffer_skip_bytes(struct line_buffer *buf, off_t len);
off_t buffer_skip_bytes(struct line_buffer *buf, off_t len);

#endif
3 changes: 2 additions & 1 deletion vcs-svn/line_buffer.txt
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,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.

0 comments on commit d234f54

Please sign in to comment.