mirror of
https://git.freebsd.org/ports.git
synced 2025-06-28 08:00:31 -04:00
62 lines
1.3 KiB
Text
62 lines
1.3 KiB
Text
--- common/ringbuf.c.orig Mon Feb 14 16:10:51 2005
|
|
+++ common/ringbuf.c Tue Aug 30 13:55:42 2005
|
|
@@ -355,7 +355,7 @@
|
|
ssize_t ring_count(RING *r, RINGCNTFUNC func, ...)
|
|
{
|
|
va_list ap;
|
|
- ssize_t len, ret;
|
|
+ ssize_t len, ret = 0;
|
|
|
|
len = ring_maxget(r);
|
|
|
|
@@ -363,37 +363,41 @@
|
|
|
|
/* There is data available */
|
|
|
|
- va_start(ap, func);
|
|
-
|
|
if (r->r + len <= r->size) {
|
|
|
|
/* Message ends before end of buffer */
|
|
|
|
/* peek at single part, return whatever the
|
|
closure returns. */
|
|
- return func(r->buf + r->r, len, 0, ap);
|
|
+ va_start(ap, func);
|
|
+ ret = func(r->buf + r->r, len, 0, ap);
|
|
+ va_end(ap);
|
|
}
|
|
else {
|
|
|
|
/* Message doesn't end before end of buffer */
|
|
|
|
/* peek at first part, till end of buffer */
|
|
+ va_start(ap, func);
|
|
ret = func(r->buf + r->r, r->size - r->r, 0, ap);
|
|
+ va_end(ap);
|
|
|
|
if (ret < r->size - r->r) {
|
|
/* Satisfied by first part; return whatever
|
|
the closure gave us. */
|
|
- return ret;
|
|
}
|
|
-
|
|
- /* peek at rest, from start of buffer */
|
|
- return ret + func(r->buf, len - (r->size - r->r),
|
|
- ret, ap);
|
|
+ else {
|
|
+ /* peek at rest, from start of buffer */
|
|
+ va_start(ap, func);
|
|
+ ret += func(r->buf, len - (r->size - r->r),
|
|
+ ret, ap);
|
|
+ va_end(ap);
|
|
+ }
|
|
}
|
|
}
|
|
|
|
/* No data available, return 0. */
|
|
- return 0;
|
|
+ return ret;
|
|
}
|
|
|
|
|