summaryrefslogtreecommitdiffstats
path: root/sys/kern/uipc_mbuf.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2002-09-18 14:57:35 +0000
committerphk <phk@FreeBSD.org>2002-09-18 14:57:35 +0000
commit9d78d39578a32950b1e4b145c514518052390c70 (patch)
tree6554eb6212d68a578eb2ea05571f8ad35acf0c90 /sys/kern/uipc_mbuf.c
parent424a669d9a5b419ebd1e90e84d434bf1c441232c (diff)
downloadFreeBSD-src-9d78d39578a32950b1e4b145c514518052390c70.zip
FreeBSD-src-9d78d39578a32950b1e4b145c514518052390c70.tar.gz
Introduce the m_length() function which will return the accumulated
length of an mbuf-chain and optionally a pointer to the last mbuf.
Diffstat (limited to 'sys/kern/uipc_mbuf.c')
-rw-r--r--sys/kern/uipc_mbuf.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/sys/kern/uipc_mbuf.c b/sys/kern/uipc_mbuf.c
index 6d66245..009b812 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);
}
OpenPOWER on IntegriCloud