Lines 736-744
nospace:
Link Here
|
736 |
*/ |
736 |
*/ |
737 |
|
737 |
|
738 |
static int |
738 |
static int |
739 |
m_bcopyxxx(void *s, void *t, u_int len) |
739 |
m_bcopyxxx(void *arg, void *src, u_int len) |
740 |
{ |
740 |
{ |
741 |
bcopy(s, t, (size_t)len); |
741 |
struct mbuf *dst = arg; |
|
|
742 |
|
743 |
bcopy(src, mtod(dst, caddr_t) + dst->m_len, (size_t) len); |
744 |
dst->m_len += len; |
742 |
return 0; |
745 |
return 0; |
743 |
} |
746 |
} |
744 |
|
747 |
|
Lines 790-806
m_copymdata(struct mbuf *m, struct mbuf *n, int off, int len,
Link Here
|
790 |
*/ |
793 |
*/ |
791 |
/* Shortcut if enough free space in first/last mbuf. */ |
794 |
/* Shortcut if enough free space in first/last mbuf. */ |
792 |
if (!prep && M_TRAILINGSPACE(mm) >= len) { |
795 |
if (!prep && M_TRAILINGSPACE(mm) >= len) { |
793 |
m_apply(n, off, len, m_bcopyxxx, mtod(mm, caddr_t) + |
796 |
m_apply(n, off, len, m_bcopyxxx, mm); |
794 |
mm->m_len); |
797 |
if (m->m_flags & M_PKTHDR) |
795 |
mm->m_len += len; |
798 |
m->m_pkthdr.len += len; |
796 |
mm->m_pkthdr.len += len; |
|
|
797 |
return m; |
799 |
return m; |
798 |
} |
800 |
} |
799 |
if (prep && M_LEADINGSPACE(mm) >= len) { |
801 |
if (prep && M_LEADINGSPACE(mm) >= len) { |
800 |
mm->m_data = mtod(mm, caddr_t) - len; |
802 |
mm->m_data = mtod(mm, caddr_t) - len; |
801 |
m_apply(n, off, len, m_bcopyxxx, mtod(mm, caddr_t)); |
803 |
m_apply(n, off, len, m_bcopyxxx, mm); |
802 |
mm->m_len += len; |
804 |
if (mm->m_flags & M_PKTHDR) |
803 |
mm->m_pkthdr.len += len; |
805 |
mm->m_pkthdr.len += len; |
804 |
return mm; |
806 |
return mm; |
805 |
} |
807 |
} |
806 |
|
808 |
|
Lines 840-846
m_copymdata(struct mbuf *m, struct mbuf *n, int off, int len,
Link Here
|
840 |
break; |
842 |
break; |
841 |
} |
843 |
} |
842 |
z->m_data += i - len; |
844 |
z->m_data += i - len; |
843 |
m_move_pkthdr(mm, z); |
845 |
if (z->m_flags & M_PKTHDR) |
|
|
846 |
m_move_pkthdr(mm, z); |
844 |
x->m_next = mm; |
847 |
x->m_next = mm; |
845 |
mm = z; |
848 |
mm = z; |
846 |
} |
849 |
} |
Lines 858-865
m_copymdata(struct mbuf *m, struct mbuf *n, int off, int len,
Link Here
|
858 |
while (len > 0) { |
861 |
while (len > 0) { |
859 |
KASSERT(z != NULL, ("m_copymdata, falling off target edge")); |
862 |
KASSERT(z != NULL, ("m_copymdata, falling off target edge")); |
860 |
i = M_TRAILINGSPACE(z); |
863 |
i = M_TRAILINGSPACE(z); |
861 |
m_apply(n, off, i, m_bcopyxxx, mtod(z, caddr_t) + z->m_len); |
864 |
m_apply(n, off, i, m_bcopyxxx, z); |
862 |
z->m_len += i; |
|
|
863 |
/* fixup pkthdr.len if necessary */ |
865 |
/* fixup pkthdr.len if necessary */ |
864 |
if ((prep ? mm : m)->m_flags & M_PKTHDR) |
866 |
if ((prep ? mm : m)->m_flags & M_PKTHDR) |
865 |
(prep ? mm : m)->m_pkthdr.len += i; |
867 |
(prep ? mm : m)->m_pkthdr.len += i; |