mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	Sync OpenBSD patchset 329:
Enclose repeated buffer draining code in a new msgbuf_drain() function, which is additionally exported for use by others. From nicm@, who reminded me that tmux is now using buffer.c, too.
This commit is contained in:
		| @@ -1,5 +1,5 @@ | |||||||
| /* $Id: imsg-buffer.c,v 1.3 2009-08-20 12:54:08 nicm Exp $ */ | /* $Id: imsg-buffer.c,v 1.4 2009-09-15 23:59:40 tcunha Exp $ */ | ||||||
| /*	$OpenBSD: imsg-buffer.c,v 1.1 2009/08/11 17:18:35 nicm Exp $	*/ | /*	$OpenBSD: imsg-buffer.c,v 1.2 2009/09/15 18:12:51 jacekm Exp $	*/ | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> |  * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> | ||||||
| @@ -144,7 +144,7 @@ int | |||||||
| buf_write(struct msgbuf *msgbuf) | buf_write(struct msgbuf *msgbuf) | ||||||
| { | { | ||||||
| 	struct iovec	 iov[IOV_MAX]; | 	struct iovec	 iov[IOV_MAX]; | ||||||
| 	struct buf	*buf, *next; | 	struct buf	*buf; | ||||||
| 	unsigned int	 i = 0; | 	unsigned int	 i = 0; | ||||||
| 	ssize_t	n; | 	ssize_t	n; | ||||||
|  |  | ||||||
| @@ -170,17 +170,7 @@ buf_write(struct msgbuf *msgbuf) | |||||||
| 		return (-2); | 		return (-2); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	for (buf = TAILQ_FIRST(&msgbuf->bufs); buf != NULL && n > 0; | 	msgbuf_drain(msgbuf, n); | ||||||
| 	    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; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return (0); | 	return (0); | ||||||
| } | } | ||||||
| @@ -200,6 +190,24 @@ msgbuf_init(struct msgbuf *msgbuf) | |||||||
| 	TAILQ_INIT(&msgbuf->bufs); | 	TAILQ_INIT(&msgbuf->bufs); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | 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 | void | ||||||
| msgbuf_clear(struct msgbuf *msgbuf) | msgbuf_clear(struct msgbuf *msgbuf) | ||||||
| { | { | ||||||
| @@ -213,7 +221,7 @@ int | |||||||
| msgbuf_write(struct msgbuf *msgbuf) | msgbuf_write(struct msgbuf *msgbuf) | ||||||
| { | { | ||||||
| 	struct iovec	 iov[IOV_MAX]; | 	struct iovec	 iov[IOV_MAX]; | ||||||
| 	struct buf	*buf, *next; | 	struct buf	*buf; | ||||||
| 	unsigned int	 i = 0; | 	unsigned int	 i = 0; | ||||||
| 	ssize_t		 n; | 	ssize_t		 n; | ||||||
| 	struct msghdr	 msg; | 	struct msghdr	 msg; | ||||||
| @@ -270,17 +278,7 @@ msgbuf_write(struct msgbuf *msgbuf) | |||||||
| 		buf->fd = -1; | 		buf->fd = -1; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	for (buf = TAILQ_FIRST(&msgbuf->bufs); buf != NULL && n > 0; | 	msgbuf_drain(msgbuf, n); | ||||||
| 	    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; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return (0); | 	return (0); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| /* $Id: imsg.h,v 1.3 2009-08-20 12:54:08 nicm Exp $ */ | /* $Id: imsg.h,v 1.4 2009-09-15 23:59:40 tcunha Exp $ */ | ||||||
| /*	$OpenBSD: imsg.h,v 1.1 2009/08/11 17:18:35 nicm Exp $	*/ | /*	$OpenBSD: imsg.h,v 1.2 2009/09/15 18:12:51 jacekm Exp $	*/ | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Copyright (c) 2006, 2007 Pierre-Yves Ritschard <pyr@openbsd.org> |  * Copyright (c) 2006, 2007 Pierre-Yves Ritschard <pyr@openbsd.org> | ||||||
| @@ -91,6 +91,7 @@ void		 buf_free(struct buf *); | |||||||
| void		 msgbuf_init(struct msgbuf *); | void		 msgbuf_init(struct msgbuf *); | ||||||
| void		 msgbuf_clear(struct msgbuf *); | void		 msgbuf_clear(struct msgbuf *); | ||||||
| int		 msgbuf_write(struct msgbuf *); | int		 msgbuf_write(struct msgbuf *); | ||||||
|  | void		 msgbuf_drain(struct msgbuf *, size_t); | ||||||
|  |  | ||||||
| /* imsg.c */ | /* imsg.c */ | ||||||
| void	 imsg_init(struct imsgbuf *, int); | void	 imsg_init(struct imsgbuf *, int); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Tiago Cunha
					Tiago Cunha