diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/ChangeLog | 5 | ||||
-rw-r--r-- | util/iobuf.c | 37 |
2 files changed, 42 insertions, 0 deletions
diff --git a/util/ChangeLog b/util/ChangeLog index 63f73ea18..9b70ca6e1 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,3 +1,8 @@ +2004-09-09 Werner Koch <[email protected]> + + * iobuf.c (iobuf_skip_rest): New. Orginal patch by Florian + Weimer. Added new argument PARTIAL. + 2004-08-19 David Shaw <[email protected]> * http.c (insert_escapes): Fix encoding problem for non-URI-safe diff --git a/util/iobuf.c b/util/iobuf.c index a0fee5bd0..b00188bcf 100644 --- a/util/iobuf.c +++ b/util/iobuf.c @@ -2120,3 +2120,40 @@ translate_file_handle ( int fd, int for_write ) #endif return fd; } + + +void +iobuf_skip_rest(IOBUF a, unsigned long n, int partial) +{ + if ( partial ) { + for (;;) { + if (a->nofast || a->d.start >= a->d.len) { + if (iobuf_readbyte (a) == -1) { + break; + } + } else { + unsigned long count = a->d.len - a->d.start; + a->nbytes += count; + a->d.start = a->d.len; + } + } + } else { + unsigned long remaining = n; + while (remaining > 0) { + if (a->nofast || a->d.start >= a->d.len) { + if (iobuf_readbyte (a) == -1) { + break; + } + --remaining; + } else { + unsigned long count = a->d.len - a->d.start; + if (count > remaining) { + count = remaining; + } + a->nbytes += count; + a->d.start += count; + remaining -= count; + } + } + } +} |