Enhancing the freebsd compat layer in preparation of including crypto support
for the wlan stack. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34794 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -156,6 +156,7 @@ struct mbuf {
|
|||||||
|
|
||||||
void m_adj(struct mbuf*, int);
|
void m_adj(struct mbuf*, int);
|
||||||
void m_align(struct mbuf*, int);
|
void m_align(struct mbuf*, int);
|
||||||
|
int m_append(struct mbuf*, int, c_caddr_t);
|
||||||
void m_cat(struct mbuf*, struct mbuf*);
|
void m_cat(struct mbuf*, struct mbuf*);
|
||||||
void m_clget(struct mbuf*, int);
|
void m_clget(struct mbuf*, int);
|
||||||
void* m_cljget(struct mbuf*, int, int);
|
void* m_cljget(struct mbuf*, int, int);
|
||||||
|
|||||||
@@ -16,5 +16,6 @@
|
|||||||
|
|
||||||
|
|
||||||
typedef int boolean_t;
|
typedef int boolean_t;
|
||||||
|
typedef __const char* c_caddr_t;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -499,6 +499,52 @@ out: if (((m = m0)->m_flags & M_PKTHDR) && (m->m_pkthdr.len < totlen))
|
|||||||
m->m_pkthdr.len = totlen;
|
m->m_pkthdr.len = totlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Append the specified data to the indicated mbuf chain,
|
||||||
|
* Extend the mbuf chain if the new data does not fit in
|
||||||
|
* existing space.
|
||||||
|
*
|
||||||
|
* Return 1 if able to complete the job; otherwise 0.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
m_append(struct mbuf *m0, int len, c_caddr_t cp)
|
||||||
|
{
|
||||||
|
struct mbuf *m, *n;
|
||||||
|
int remainder, space;
|
||||||
|
|
||||||
|
for (m = m0; m->m_next != NULL; m = m->m_next)
|
||||||
|
;
|
||||||
|
remainder = len;
|
||||||
|
space = M_TRAILINGSPACE(m);
|
||||||
|
if (space > 0) {
|
||||||
|
/*
|
||||||
|
* Copy into available space.
|
||||||
|
*/
|
||||||
|
if (space > remainder)
|
||||||
|
space = remainder;
|
||||||
|
bcopy(cp, mtod(m, caddr_t) + m->m_len, space);
|
||||||
|
m->m_len += space;
|
||||||
|
cp += space, remainder -= space;
|
||||||
|
}
|
||||||
|
while (remainder > 0) {
|
||||||
|
/*
|
||||||
|
* Allocate a new mbuf; could check space
|
||||||
|
* and allocate a cluster instead.
|
||||||
|
*/
|
||||||
|
n = m_get(M_DONTWAIT, m->m_type);
|
||||||
|
if (n == NULL)
|
||||||
|
break;
|
||||||
|
n->m_len = min(MLEN, remainder);
|
||||||
|
bcopy(cp, mtod(n, caddr_t), n->m_len);
|
||||||
|
cp += n->m_len, remainder -= n->m_len;
|
||||||
|
m->m_next = n;
|
||||||
|
m = n;
|
||||||
|
}
|
||||||
|
if (m0->m_flags & M_PKTHDR)
|
||||||
|
m0->m_pkthdr.len += len - remainder;
|
||||||
|
return (remainder == 0);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Defragment an mbuf chain, returning at most maxfrags separate
|
* Defragment an mbuf chain, returning at most maxfrags separate
|
||||||
* mbufs+clusters. If this is not possible NULL is returned and
|
* mbufs+clusters. If this is not possible NULL is returned and
|
||||||
|
|||||||
Reference in New Issue
Block a user