diff options
| author | Poul-Henning Kamp <phk@FreeBSD.org> | 2002-09-18 14:57:35 +0000 |
|---|---|---|
| committer | Poul-Henning Kamp <phk@FreeBSD.org> | 2002-09-18 14:57:35 +0000 |
| commit | ac6e585d247f5d7ac87a7565b7909fb8c107cb66 (patch) | |
| tree | 6554eb6212d68a578eb2ea05571f8ad35acf0c90 | |
| parent | 9f86067a9ca13c4e46545f86a663230171d3a719 (diff) | |
Notes
| -rw-r--r-- | sys/kern/uipc_mbuf.c | 25 | ||||
| -rw-r--r-- | sys/sys/mbuf.h | 1 |
2 files changed, 20 insertions, 6 deletions
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); } diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h index a791d356a804..b4bd624a29d9 100644 --- a/sys/sys/mbuf.h +++ b/sys/sys/mbuf.h @@ -489,6 +489,7 @@ struct mbuf *m_getcl(int, short, int); struct mbuf *m_gethdr(int, short); struct mbuf *m_gethdr_clrd(int, short); struct mbuf *m_getm(struct mbuf *, int, int, short); +int m_length(struct mbuf *m, struct mbuf **l); struct mbuf *m_prepend(struct mbuf *, int, int); void m_print(const struct mbuf *m); struct mbuf *m_pulldown(struct mbuf *, int, int, int *); |
