diff options
author | phk <phk@FreeBSD.org> | 2002-09-18 14:57:35 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2002-09-18 14:57:35 +0000 |
commit | 9d78d39578a32950b1e4b145c514518052390c70 (patch) | |
tree | 6554eb6212d68a578eb2ea05571f8ad35acf0c90 /sys/kern/uipc_mbuf.c | |
parent | 424a669d9a5b419ebd1e90e84d434bf1c441232c (diff) | |
download | FreeBSD-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.c | 25 |
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); } |