Lines Matching +full:- +full:m

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
44 /* XXX: w/64-bit pointers, u_int not enough! */
66 xdrmbuf_create(XDR *xdrs, struct mbuf *m, enum xdr_op op) in xdrmbuf_create() argument
69 KASSERT(m != NULL, ("xdrmbuf_create with NULL mbuf chain")); in xdrmbuf_create()
70 xdrs->x_op = op; in xdrmbuf_create()
71 xdrs->x_ops = &xdrmbuf_ops; in xdrmbuf_create()
72 xdrs->x_base = (char *) m; in xdrmbuf_create()
74 m = m_last(m); in xdrmbuf_create()
75 xdrs->x_private = m; in xdrmbuf_create()
76 xdrs->x_handy = m->m_len; in xdrmbuf_create()
78 xdrs->x_private = m; in xdrmbuf_create()
79 xdrs->x_handy = 0; in xdrmbuf_create()
89 struct mbuf *m; in xdrmbuf_putmbuf() local
96 m = (struct mbuf *) xdrs->x_private; in xdrmbuf_putmbuf()
97 m->m_next = madd; in xdrmbuf_putmbuf()
99 m = m_last(madd); in xdrmbuf_putmbuf()
100 xdrs->x_private = m; in xdrmbuf_putmbuf()
101 xdrs->x_handy = m->m_len; in xdrmbuf_putmbuf()
109 struct mbuf *m0, *m; in xdrmbuf_getall() local
111 KASSERT(xdrs->x_ops == &xdrmbuf_ops && xdrs->x_op == XDR_DECODE, in xdrmbuf_getall()
114 m0 = (struct mbuf *) xdrs->x_base; in xdrmbuf_getall()
115 m = (struct mbuf *) xdrs->x_private; in xdrmbuf_getall()
116 if (m0 != m) { in xdrmbuf_getall()
117 while (m0->m_next != m) in xdrmbuf_getall()
118 m0 = m0->m_next; in xdrmbuf_getall()
119 m0->m_next = NULL; in xdrmbuf_getall()
120 xdrs->x_private = NULL; in xdrmbuf_getall()
122 xdrs->x_base = NULL; in xdrmbuf_getall()
123 xdrs->x_private = NULL; in xdrmbuf_getall()
126 if (m) in xdrmbuf_getall()
127 m_adj(m, xdrs->x_handy); in xdrmbuf_getall()
129 m = m_get(M_WAITOK, MT_DATA); in xdrmbuf_getall()
130 return (m); in xdrmbuf_getall()
137 if (xdrs->x_op == XDR_DECODE && xdrs->x_base) { in xdrmbuf_destroy()
138 m_freem((struct mbuf *) xdrs->x_base); in xdrmbuf_destroy()
139 xdrs->x_base = NULL; in xdrmbuf_destroy()
140 xdrs->x_private = NULL; in xdrmbuf_destroy()
179 struct mbuf *m = (struct mbuf *) xdrs->x_private; in xdrmbuf_getbytes() local
186 if (!m) { in xdrmbuf_getbytes()
193 sz = m->m_len - xdrs->x_handy; in xdrmbuf_getbytes()
196 bcopy(mtod(m, const char *) + xdrs->x_handy, addr, sz); in xdrmbuf_getbytes()
199 xdrs->x_handy += sz; in xdrmbuf_getbytes()
200 len -= sz; in xdrmbuf_getbytes()
202 if (xdrs->x_handy == m->m_len) { in xdrmbuf_getbytes()
203 m = m->m_next; in xdrmbuf_getbytes()
204 xdrs->x_private = (void *) m; in xdrmbuf_getbytes()
205 xdrs->x_handy = 0; in xdrmbuf_getbytes()
215 struct mbuf *m = (struct mbuf *) xdrs->x_private; in xdrmbuf_putbytes() local
220 sz = M_TRAILINGSPACE(m) + (m->m_len - xdrs->x_handy); in xdrmbuf_putbytes()
223 bcopy(addr, mtod(m, char *) + xdrs->x_handy, sz); in xdrmbuf_putbytes()
225 xdrs->x_handy += sz; in xdrmbuf_putbytes()
226 if (xdrs->x_handy > m->m_len) in xdrmbuf_putbytes()
227 m->m_len = xdrs->x_handy; in xdrmbuf_putbytes()
228 len -= sz; in xdrmbuf_putbytes()
230 if (xdrs->x_handy == m->m_len && M_TRAILINGSPACE(m) == 0) { in xdrmbuf_putbytes()
231 if (!m->m_next) { in xdrmbuf_putbytes()
232 if (m->m_flags & M_EXT) in xdrmbuf_putbytes()
233 n = m_getcl(M_WAITOK, m->m_type, 0); in xdrmbuf_putbytes()
235 n = m_get(M_WAITOK, m->m_type); in xdrmbuf_putbytes()
236 m->m_next = n; in xdrmbuf_putbytes()
238 m = m->m_next; in xdrmbuf_putbytes()
239 xdrs->x_private = (void *) m; in xdrmbuf_putbytes()
240 xdrs->x_handy = 0; in xdrmbuf_putbytes()
250 struct mbuf *m0 = (struct mbuf *) xdrs->x_base; in xdrmbuf_getpos()
251 struct mbuf *m = (struct mbuf *) xdrs->x_private; in xdrmbuf_getpos() local
254 while (m0 && m0 != m) { in xdrmbuf_getpos()
255 pos += m0->m_len; in xdrmbuf_getpos()
256 m0 = m0->m_next; in xdrmbuf_getpos()
260 return (pos + xdrs->x_handy); in xdrmbuf_getpos()
266 struct mbuf *m = (struct mbuf *) xdrs->x_base; in xdrmbuf_setpos() local
268 while (m && pos > m->m_len) { in xdrmbuf_setpos()
269 pos -= m->m_len; in xdrmbuf_setpos()
270 m = m->m_next; in xdrmbuf_setpos()
272 KASSERT(m, ("Corrupted mbuf chain")); in xdrmbuf_setpos()
274 xdrs->x_private = (void *) m; in xdrmbuf_setpos()
275 xdrs->x_handy = pos; in xdrmbuf_setpos()
283 struct mbuf *m = (struct mbuf *) xdrs->x_private; in xdrmbuf_inline() local
287 if (!m) in xdrmbuf_inline()
289 if (xdrs->x_op == XDR_ENCODE) { in xdrmbuf_inline()
290 available = M_TRAILINGSPACE(m) + (m->m_len - xdrs->x_handy); in xdrmbuf_inline()
292 available = m->m_len - xdrs->x_handy; in xdrmbuf_inline()
296 p = mtod(m, char *) + xdrs->x_handy; in xdrmbuf_inline()
297 if (((uintptr_t) p) & (sizeof(int32_t) - 1)) in xdrmbuf_inline()
299 xdrs->x_handy += len; in xdrmbuf_inline()
300 if (xdrs->x_handy > m->m_len) in xdrmbuf_inline()
301 m->m_len = xdrs->x_handy; in xdrmbuf_inline()