diff options
author | Jacek Masiulaniec <jacekm@cvs.openbsd.org> | 2009-09-15 10:55:00 +0000 |
---|---|---|
committer | Jacek Masiulaniec <jacekm@cvs.openbsd.org> | 2009-09-15 10:55:00 +0000 |
commit | 43985f9587646943ba4a959767965a408816239c (patch) | |
tree | afb1260c2c2827d7a8f7391f3186c6f5941f0007 /usr.sbin/ospfd | |
parent | 3fc21b44e9512152a48c83f4a8f0da37a597ce65 (diff) |
Enclose repeated buffer draining code in a new msgbuf_drain()
function, which is additionally exported for use by others.
It will be needed by smtpd's SSL module when the SMTP client code
is changed to replace libevent's evbuffers with our msgbuf_* API.
ok gilles@ henning@ guenther@ eric@
Diffstat (limited to 'usr.sbin/ospfd')
-rw-r--r-- | usr.sbin/ospfd/buffer.c | 48 | ||||
-rw-r--r-- | usr.sbin/ospfd/imsg.h | 3 |
2 files changed, 25 insertions, 26 deletions
diff --git a/usr.sbin/ospfd/buffer.c b/usr.sbin/ospfd/buffer.c index c5fddc10e95..68789a16dbf 100644 --- a/usr.sbin/ospfd/buffer.c +++ b/usr.sbin/ospfd/buffer.c @@ -1,4 +1,4 @@ -/* $OpenBSD: buffer.c,v 1.16 2009/07/23 18:58:42 eric Exp $ */ +/* $OpenBSD: buffer.c,v 1.17 2009/09/15 10:54:59 jacekm Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> @@ -144,7 +144,7 @@ int buf_write(struct msgbuf *msgbuf) { struct iovec iov[IOV_MAX]; - struct buf *buf, *next; + struct buf *buf; unsigned int i = 0; ssize_t n; @@ -170,17 +170,7 @@ buf_write(struct msgbuf *msgbuf) return (-2); } - for (buf = TAILQ_FIRST(&msgbuf->bufs); buf != NULL && n > 0; - buf = next) { - next = TAILQ_NEXT(buf, entry); - if (buf->rpos + n >= buf->wpos) { - n -= buf->wpos - buf->rpos; - buf_dequeue(msgbuf, buf); - } else { - buf->rpos += n; - n = 0; - } - } + msgbuf_drain(msgbuf, n); return (0); } @@ -201,6 +191,24 @@ msgbuf_init(struct msgbuf *msgbuf) } void +msgbuf_drain(struct msgbuf *msgbuf, size_t n) +{ + struct buf *buf, *next; + + for (buf = TAILQ_FIRST(&msgbuf->bufs); buf != NULL && n > 0; + buf = next) { + next = TAILQ_NEXT(buf, entry); + if (buf->rpos + n >= buf->wpos) { + n -= buf->wpos - buf->rpos; + buf_dequeue(msgbuf, buf); + } else { + buf->rpos += n; + n = 0; + } + } +} + +void msgbuf_clear(struct msgbuf *msgbuf) { struct buf *buf; @@ -213,7 +221,7 @@ int msgbuf_write(struct msgbuf *msgbuf) { struct iovec iov[IOV_MAX]; - struct buf *buf, *next; + struct buf *buf; unsigned int i = 0; ssize_t n; struct msghdr msg; @@ -270,17 +278,7 @@ msgbuf_write(struct msgbuf *msgbuf) buf->fd = -1; } - for (buf = TAILQ_FIRST(&msgbuf->bufs); buf != NULL && n > 0; - buf = next) { - next = TAILQ_NEXT(buf, entry); - if (buf->rpos + n >= buf->wpos) { - n -= buf->wpos - buf->rpos; - buf_dequeue(msgbuf, buf); - } else { - buf->rpos += n; - n = 0; - } - } + msgbuf_drain(msgbuf, n); return (0); } diff --git a/usr.sbin/ospfd/imsg.h b/usr.sbin/ospfd/imsg.h index 8a93607cac8..c4e7247c7c6 100644 --- a/usr.sbin/ospfd/imsg.h +++ b/usr.sbin/ospfd/imsg.h @@ -1,4 +1,4 @@ -/* $OpenBSD: imsg.h,v 1.7 2009/06/07 05:56:25 eric Exp $ */ +/* $OpenBSD: imsg.h,v 1.8 2009/09/15 10:54:59 jacekm Exp $ */ /* * Copyright (c) 2006, 2007 Pierre-Yves Ritschard <pyr@openbsd.org> @@ -90,6 +90,7 @@ void buf_free(struct buf *); void msgbuf_init(struct msgbuf *); void msgbuf_clear(struct msgbuf *); int msgbuf_write(struct msgbuf *); +void msgbuf_drain(struct msgbuf *, size_t); /* imsg.c */ void imsg_init(struct imsgbuf *, int); |