diff options
author | Henning Brauer <henning@cvs.openbsd.org> | 2004-01-03 14:06:36 +0000 |
---|---|---|
committer | Henning Brauer <henning@cvs.openbsd.org> | 2004-01-03 14:06:36 +0000 |
commit | 9a036d216a1cf77b21b0610eeff34251279dbafa (patch) | |
tree | f5f90f063bfb98fd964ce485e6b57238e9507266 /usr.sbin | |
parent | 6f7ff937aa150621fcaa178405ebd86a0a33bda6 (diff) |
change imsg_read semantics so that the number of bytes read is returned.
that means that the callers can (and must) coope with closed connections
themselves, what is exactly the desired behaviour.
Diffstat (limited to 'usr.sbin')
-rw-r--r-- | usr.sbin/bgpd/bgpd.c | 9 | ||||
-rw-r--r-- | usr.sbin/bgpd/control.c | 4 | ||||
-rw-r--r-- | usr.sbin/bgpd/imsg.c | 10 | ||||
-rw-r--r-- | usr.sbin/bgpd/rde.c | 7 | ||||
-rw-r--r-- | usr.sbin/bgpd/session.c | 7 |
5 files changed, 22 insertions, 15 deletions
diff --git a/usr.sbin/bgpd/bgpd.c b/usr.sbin/bgpd/bgpd.c index 916db012358..1b37de9ecb1 100644 --- a/usr.sbin/bgpd/bgpd.c +++ b/usr.sbin/bgpd/bgpd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: bgpd.c,v 1.49 2004/01/01 23:46:47 henning Exp $ */ +/* $OpenBSD: bgpd.c,v 1.50 2004/01/03 14:06:35 henning Exp $ */ /* * Copyright (c) 2003 Henning Brauer <henning@openbsd.org> @@ -345,9 +345,14 @@ dispatch_imsg(struct imsgbuf *ibuf, int idx, struct mrt_config *conf) int n; in_addr_t ina; - if (imsg_read(ibuf) == -1) + if ((n = imsg_read(ibuf)) == -1) return (-1); + if (n == 0) { /* connection closed */ + logit(LOG_CRIT, "dispatch_imsg in main: pipe closed"); + return (-1); + } + for (;;) { if ((n = imsg_get(ibuf, &imsg)) == -1) return (-1); diff --git a/usr.sbin/bgpd/control.c b/usr.sbin/bgpd/control.c index 8dba7cffb4f..c201b20dc3c 100644 --- a/usr.sbin/bgpd/control.c +++ b/usr.sbin/bgpd/control.c @@ -1,4 +1,4 @@ -/* $OpenBSD: control.c,v 1.5 2004/01/03 13:54:27 henning Exp $ */ +/* $OpenBSD: control.c,v 1.6 2004/01/03 14:06:35 henning Exp $ */ /* * Copyright (c) 2003 Henning Brauer <henning@openbsd.org> @@ -179,7 +179,7 @@ control_dispatch_msg(struct pollfd *pfd, int i) return (0); } - if (imsg_read(&c->ibuf) == -1) { + if (imsg_read(&c->ibuf) <= 0) { control_close(pfd->fd); return (1); } diff --git a/usr.sbin/bgpd/imsg.c b/usr.sbin/bgpd/imsg.c index 1d2a8d4abab..a008c5dd00e 100644 --- a/usr.sbin/bgpd/imsg.c +++ b/usr.sbin/bgpd/imsg.c @@ -1,4 +1,4 @@ -/* $OpenBSD: imsg.c,v 1.17 2004/01/01 23:46:47 henning Exp $ */ +/* $OpenBSD: imsg.c,v 1.18 2004/01/03 14:06:35 henning Exp $ */ /* * Copyright (c) 2003 Henning Brauer <henning@openbsd.org> @@ -42,19 +42,15 @@ imsg_read(struct imsgbuf *ibuf) if ((n = read(ibuf->sock, ibuf->r.buf + ibuf->r.wpos, sizeof(ibuf->r.buf) - ibuf->r.wpos)) == -1) { if (errno != EINTR && errno != EAGAIN) { - log_err("imsg_get: pipe read error"); + log_err("imsg_read: pipe read error"); return (-1); } return (0); } - if (n == 0) { /* connection closed */ - logit(LOG_CRIT, "imsg_get: pipe closed"); - return (-1); - } ibuf->r.wpos += n; - return (0); + return (n); } int diff --git a/usr.sbin/bgpd/rde.c b/usr.sbin/bgpd/rde.c index 236589583be..7010c8177c5 100644 --- a/usr.sbin/bgpd/rde.c +++ b/usr.sbin/bgpd/rde.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rde.c,v 1.40 2004/01/01 23:09:09 henning Exp $ */ +/* $OpenBSD: rde.c,v 1.41 2004/01/03 14:06:35 henning Exp $ */ /* * Copyright (c) 2003 Henning Brauer <henning@openbsd.org> @@ -176,9 +176,12 @@ rde_dispatch_imsg(struct imsgbuf *ibuf, int idx) u_int32_t rid; int n; - if (imsg_read(ibuf) == -1) + if ((n = imsg_read(ibuf)) == -1) fatal("rde_dispatch_imsg: imsg_read error"); + if (n == 0) /* connection closed */ + fatal("rde_dispatch_imsg: pipe closed"); + for (;;) { if ((n = imsg_get(ibuf, &imsg)) == -1) fatal("rde_dispatch_imsg: imsg_read error"); diff --git a/usr.sbin/bgpd/session.c b/usr.sbin/bgpd/session.c index 6efc3ad2643..52e546334e9 100644 --- a/usr.sbin/bgpd/session.c +++ b/usr.sbin/bgpd/session.c @@ -1,4 +1,4 @@ -/* $OpenBSD: session.c,v 1.54 2004/01/01 23:46:47 henning Exp $ */ +/* $OpenBSD: session.c,v 1.55 2004/01/03 14:06:35 henning Exp $ */ /* * Copyright (c) 2003 Henning Brauer <henning@openbsd.org> @@ -1270,9 +1270,12 @@ session_dispatch_imsg(struct imsgbuf *ibuf, int idx) enum reconf_action reconf; int n; - if (imsg_read(ibuf) == -1) + if ((n = imsg_read(ibuf)) == -1) fatal("session_dispatch_imsg: imsg_read error"); + if (n == 0) /* connection closed */ + fatal("session_dispatch_imsg: pipe closed"); + for (;;) { if ((n = imsg_get(ibuf, &imsg)) == -1) fatal("session_dispatch_imsg: imsg_get error"); |