ports/net/openradius/files/patch-ringbuf
Kirill Ponomarev e71bb0a171 Fix coredumps on amd64.
PR:		ports/85839
Submitted by:	maintainer, joerg
2005-09-08 08:21:43 +00:00

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;
}