.TH rmvb() "" "" "DDI/DKI Kernel Routine"
.PC "Remove a block from a message"
.B "#include <sys/stream.h>"
\fBmblk_t *rmvb(\fImessage\^\fB, \fIblock\^\fB)\fR
\fBmblk_t *\fImessage\^\fB, *\fIblock\^\fB;\fR
.PP
.B rmvb()
removes
.I block
from
.IR message .
If all goes well, it returns the address of the altered message.
It fails and returns NULL if
.I block
is the only block within
.IR message ;
and it fails and returns \-1 if
.I block
is not associated with
.IR message .
.PP
The caller must free
.IR block :
.B rmvb()
only removes it from
.IR message .
.SH "See Also"
.B
DDI/DKI kernel routines,
msgb
.R
.SH Notes
.B rmvb()
has base or interrupt level.
It does not sleep.
.PP
A driver can hold a
driver-defined basic lock, read/write lock, or sleep lock
across a call to this function.
