esballoc(9r)esballoc(9r)NAMEesballoc - STREAMS: Allocates a message block with a shared buffer
SYNOPSIS
#include <sys/stream.h>
mblk_t * esballoc(
unsigned char *base,
int size,
int pri,
frtn_t *free_rtnp );
ARGUMENTS
Specifies the address of the user-supplied data buffer. Specifies the
number of bytes in the data buffer. Specifies the priority of the
allocation request (to be used by the allocb interface, which esballoc
calls). Specifies the free interface (routine) data structure.
DESCRIPTION
The esballoc interface creates a STREAMS message and attaches a user-
supplied data buffer in place of a STREAMS data buffer. The interface
calls allocb to obtain a message and data block header. The user-sup‐
plied data buffer, pointed to by the base argument, is used as the data
buffer for the message.
The free_rtn structure is referenced by the dp_freep member of the
datab structure. When the freeb interface is called to free the mes‐
sage, the driver's message free interface (referenced through the
free_rtn structure) is called, with arguments, to free the data buffer.
The free_rtn structure is defined as follows:
/* Free return structure for esballoc */ typedef struct free_rtn {
void (*free_func)(char *, char *); /* Interface to free buffer */
char * free_arg; /* Parameter to free_func */ }
frtn_t;
Instead of requiring a specific number of arguments, the free_arg mem‐
ber is of type char *. This way, the driver can pass a pointer to a
structure if more than one argument is needed.
NOTES
The free_func interface must be defined in kernel space and should be
declared void. It has no user context and must not sleep.
RETURN VALUES
Upon successful completion, the esballoc interface returns a pointer to
the newly allocated message block. This message block is of type struct
msgb *. The msgb data structure is defined in the
/usr/sys/include/sys/stream.h file.
On failure, esballoc returns a NULL pointer.
SEE ALSO
Kernel Interfaces: allocb(9r), freeb(9r)
Programmer's Guide: STREAMS
esballoc(9r)