From ac6e585d247f5d7ac87a7565b7909fb8c107cb66 Mon Sep 17 00:00:00 2001 From: Poul-Henning Kamp Date: Wed, 18 Sep 2002 14:57:35 +0000 Subject: Introduce the m_length() function which will return the accumulated length of an mbuf-chain and optionally a pointer to the last mbuf. --- sys/kern/uipc_mbuf.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'sys/kern') diff --git a/sys/kern/uipc_mbuf.c b/sys/kern/uipc_mbuf.c index 6d66245c5bce..009b812b0bcf 100644 --- a/sys/kern/uipc_mbuf.c +++ b/sys/kern/uipc_mbuf.c @@ -714,13 +714,26 @@ m_print(const struct mbuf *m) int m_fixhdr(struct mbuf *m0) { - struct mbuf *m = m0; - int len = 0; + int len; - while (m) { + len = m_length(m0, NULL); + m0->m_pkthdr.len = len; + return (len); +} + +int +m_length(struct mbuf *m0, struct mbuf **last) +{ + struct mbuf *m; + int len; + + len = 0; + for (m = m0; m != NULL; m = m->m_next) { len += m->m_len; - m = m->m_next; + if (m->m_next == NULL) + break; } - m0->m_pkthdr.len = len; - return len; + if (last != NULL) + *last = m; + return (len); } -- cgit v1.3