diff options
Diffstat (limited to 'lib/imsg.c')
| -rw-r--r-- | lib/imsg.c | 117 | 
1 files changed, 53 insertions, 64 deletions
diff --git a/lib/imsg.c b/lib/imsg.c index fc62c13734..10650f648a 100644 --- a/lib/imsg.c +++ b/lib/imsg.c @@ -21,22 +21,21 @@  #include "openbsd-queue.h"  #include "imsg.h" -int	 imsg_fd_overhead = 0; +int imsg_fd_overhead = 0; -int	 imsg_get_fd(struct imsgbuf *); +int imsg_get_fd(struct imsgbuf *);  #ifndef __OpenBSD__  /*   * The original code calls getdtablecount() which is OpenBSD specific. Use   * available_fds() from OpenSMTPD instead.   */ -static int -available_fds(unsigned int n) +static int available_fds(unsigned int n)  { -	unsigned int	i; -	int		ret, fds[256]; +	unsigned int i; +	int ret, fds[256]; -	if (n > (sizeof(fds)/sizeof(fds[0]))) +	if (n > (sizeof(fds) / sizeof(fds[0])))  		return (1);  	ret = 0; @@ -59,8 +58,7 @@ available_fds(unsigned int n)  }  #endif -void -imsg_init(struct imsgbuf *ibuf, int fd) +void imsg_init(struct imsgbuf *ibuf, int fd)  {  	msgbuf_init(&ibuf->w);  	memset(&ibuf->r, 0, sizeof(ibuf->r)); @@ -70,19 +68,18 @@ imsg_init(struct imsgbuf *ibuf, int fd)  	TAILQ_INIT(&ibuf->fds);  } -ssize_t -imsg_read(struct imsgbuf *ibuf) +ssize_t imsg_read(struct imsgbuf *ibuf)  { -	struct msghdr		 msg; -	struct cmsghdr		*cmsg; +	struct msghdr msg; +	struct cmsghdr *cmsg;  	union {  		struct cmsghdr hdr; -		char	buf[CMSG_SPACE(sizeof(int) * 1)]; +		char buf[CMSG_SPACE(sizeof(int) * 1)];  	} cmsgbuf; -	struct iovec		 iov; -	ssize_t			 n = -1; -	int			 fd; -	struct imsg_fd		*ifd; +	struct iovec iov; +	ssize_t n = -1; +	int fd; +	struct imsg_fd *ifd;  	memset(&msg, 0, sizeof(msg));  	memset(&cmsgbuf, 0, sizeof(cmsgbuf)); @@ -99,12 +96,14 @@ imsg_read(struct imsgbuf *ibuf)  again:  #ifdef __OpenBSD__ -	if (getdtablecount() + imsg_fd_overhead + -	    (int)((CMSG_SPACE(sizeof(int))-CMSG_SPACE(0))/sizeof(int)) +	if (getdtablecount() + imsg_fd_overhead +		    + (int)((CMSG_SPACE(sizeof(int)) - CMSG_SPACE(0)) +			    / sizeof(int))  	    >= getdtablesize()) {  #else -	if (available_fds(imsg_fd_overhead + -	    (CMSG_SPACE(sizeof(int))-CMSG_SPACE(0))/sizeof(int))) { +	if (available_fds(imsg_fd_overhead +			  + (CMSG_SPACE(sizeof(int)) - CMSG_SPACE(0)) +				    / sizeof(int))) {  #endif  		errno = EAGAIN;  		free(ifd); @@ -120,9 +119,9 @@ again:  	ibuf->r.wpos += n;  	for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; -	    cmsg = CMSG_NXTHDR(&msg, cmsg)) { -		if (cmsg->cmsg_level == SOL_SOCKET && -		    cmsg->cmsg_type == SCM_RIGHTS) { +	     cmsg = CMSG_NXTHDR(&msg, cmsg)) { +		if (cmsg->cmsg_level == SOL_SOCKET +		    && cmsg->cmsg_type == SCM_RIGHTS) {  			int i;  			int j; @@ -131,14 +130,15 @@ again:  			 * padding rules, our control buffer might contain  			 * more than one fd, and we must close them.  			 */ -			j = ((char *)cmsg + cmsg->cmsg_len - -			    (char *)CMSG_DATA(cmsg)) / sizeof(int); +			j = ((char *)cmsg + cmsg->cmsg_len +			     - (char *)CMSG_DATA(cmsg)) +			    / sizeof(int);  			for (i = 0; i < j; i++) {  				fd = ((int *)CMSG_DATA(cmsg))[i];  				if (ifd != NULL) {  					ifd->fd = fd;  					TAILQ_INSERT_TAIL(&ibuf->fds, ifd, -					    entry); +							  entry);  					ifd = NULL;  				} else  					close(fd); @@ -152,10 +152,9 @@ fail:  	return (n);  } -ssize_t -imsg_get(struct imsgbuf *ibuf, struct imsg *imsg) +ssize_t imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)  { -	size_t			 av, left, datalen; +	size_t av, left, datalen;  	av = ibuf->r.wpos; @@ -163,8 +162,7 @@ imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)  		return (0);  	memcpy(&imsg->hdr, ibuf->r.buf, sizeof(imsg->hdr)); -	if (imsg->hdr.len < IMSG_HEADER_SIZE || -	    imsg->hdr.len > MAX_IMSGSIZE) { +	if (imsg->hdr.len < IMSG_HEADER_SIZE || imsg->hdr.len > MAX_IMSGSIZE) {  		errno = ERANGE;  		return (-1);  	} @@ -183,7 +181,7 @@ imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)  		imsg->fd = -1;  	if (imsg->data) -	  memcpy(imsg->data, ibuf->r.rptr, datalen); +		memcpy(imsg->data, ibuf->r.rptr, datalen);  	if (imsg->hdr.len < av) {  		left = av - imsg->hdr.len; @@ -195,11 +193,10 @@ imsg_get(struct imsgbuf *ibuf, struct imsg *imsg)  	return (datalen + IMSG_HEADER_SIZE);  } -int -imsg_compose(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid, -    pid_t pid, int fd, const void *data, u_int16_t datalen) +int imsg_compose(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid, +		 pid_t pid, int fd, const void *data, u_int16_t datalen)  { -	struct ibuf	*wbuf; +	struct ibuf *wbuf;  	if ((wbuf = imsg_create(ibuf, type, peerid, pid, datalen)) == NULL)  		return (-1); @@ -214,12 +211,11 @@ imsg_compose(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,  	return (1);  } -int -imsg_composev(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid, -    pid_t pid, int fd, const struct iovec *iov, int iovcnt) +int imsg_composev(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid, +		  pid_t pid, int fd, const struct iovec *iov, int iovcnt)  { -	struct ibuf	*wbuf; -	int		 i, datalen = 0; +	struct ibuf *wbuf; +	int i, datalen = 0;  	for (i = 0; i < iovcnt; i++)  		datalen += iov[i].iov_len; @@ -239,12 +235,11 @@ imsg_composev(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,  }  /* ARGSUSED */ -struct ibuf * -imsg_create(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid, -    pid_t pid, u_int16_t datalen) +struct ibuf *imsg_create(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid, +			 pid_t pid, u_int16_t datalen)  { -	struct ibuf	*wbuf; -	struct imsg_hdr	 hdr; +	struct ibuf *wbuf; +	struct imsg_hdr hdr;  	datalen += IMSG_HEADER_SIZE;  	if (datalen > MAX_IMSGSIZE) { @@ -266,8 +261,7 @@ imsg_create(struct imsgbuf *ibuf, u_int32_t type, u_int32_t peerid,  	return (wbuf);  } -int -imsg_add(struct ibuf *msg, const void *data, u_int16_t datalen) +int imsg_add(struct ibuf *msg, const void *data, u_int16_t datalen)  {  	if (datalen)  		if (ibuf_add(msg, data, datalen) == -1) { @@ -277,10 +271,9 @@ imsg_add(struct ibuf *msg, const void *data, u_int16_t datalen)  	return (datalen);  } -void -imsg_close(struct imsgbuf *ibuf, struct ibuf *msg) +void imsg_close(struct imsgbuf *ibuf, struct ibuf *msg)  { -	struct imsg_hdr	*hdr; +	struct imsg_hdr *hdr;  	hdr = (struct imsg_hdr *)msg->buf; @@ -293,17 +286,15 @@ imsg_close(struct imsgbuf *ibuf, struct ibuf *msg)  	ibuf_close(&ibuf->w, msg);  } -void -imsg_free(struct imsg *imsg) +void imsg_free(struct imsg *imsg)  {  	free(imsg->data);  } -int -imsg_get_fd(struct imsgbuf *ibuf) +int imsg_get_fd(struct imsgbuf *ibuf)  { -	int		 fd; -	struct imsg_fd	*ifd; +	int fd; +	struct imsg_fd *ifd;  	if ((ifd = TAILQ_FIRST(&ibuf->fds)) == NULL)  		return (-1); @@ -315,8 +306,7 @@ imsg_get_fd(struct imsgbuf *ibuf)  	return (fd);  } -int -imsg_flush(struct imsgbuf *ibuf) +int imsg_flush(struct imsgbuf *ibuf)  {  	while (ibuf->w.queued)  		if (msgbuf_write(&ibuf->w) <= 0) @@ -324,10 +314,9 @@ imsg_flush(struct imsgbuf *ibuf)  	return (0);  } -void -imsg_clear(struct imsgbuf *ibuf) +void imsg_clear(struct imsgbuf *ibuf)  { -	int	fd; +	int fd;  	msgbuf_clear(&ibuf->w);  	while ((fd = imsg_get_fd(ibuf)) != -1)  | 
