mirror of
				https://github.com/tmux/tmux.git
				synced 2025-10-26 12:27:15 +00:00 
			
		
		
		
	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:
		| @@ -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); | ||||
| } | ||||
| @@ -200,6 +190,24 @@ msgbuf_init(struct msgbuf *msgbuf) | ||||
| 	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 | ||||
| msgbuf_clear(struct msgbuf *msgbuf) | ||||
| { | ||||
| @@ -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); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jacek Masiulaniec
					Jacek Masiulaniec