See rpc(3NSL) for the definition of the XDR data
structure. Note that any buffers passed to the XDR routines must be
properly aligned. It is suggested either that malloc(3C) be used to
allocate these buffers, or that the programmer insure that the buffer
address is divisible evenly by four.
#include <rpc/xdr.h>
bool_t xdr_control(XDR *xdrs, int
req, void *info);
A function macro to change or retrieve various
information about an XDR stream. req indicates the type of
operation and info is a pointer to the information. The supported
values of req is XDR_GET_BYTES_AVAIL and its argument type is
xdr_bytesrec *. They return the number of bytes left unconsumed in the
stream and a flag indicating whether or not this is the last fragment.
uint_t xdr_getpos(const XDR
*xdrs);
A macro that invokes the get-position routine associated
with the XDR stream, xdrs. The routine returns an unsigned
integer, which indicates the position of the XDR byte stream. A
desirable feature of XDR streams is that simple arithmetic works with
this number, although the XDR stream instances need not guarantee this.
Therefore, applications written for portability should not depend on this
feature.
rpc_inline_t *xdr_inline(XDR *xdrs, int
len);
A macro that invokes the in-line routine associated with
the
XDR stream,
xdrs. The routine returns a pointer to a
contiguous piece of the stream's buffer;
len is the byte length of the
desired buffer.
Warning: xdr_inline() may return NULL if it cannot
allocate a contiguous piece of a buffer. Therefore the behavior may vary
among stream instances; it exists for the sake of efficiency, and
applications written for portability should not depend on this feature.
bool_t xdrrec_endofrecord(XDR *xdrs,
bool_t sendnow);
This routine can be invoked only on streams created by
xdrrec_create(). See
xdr_create(3NSL). The data in the output
buffer is marked as a completed record, and the output buffer is optionally
written out if
sendnow is
TRUE. This routine returns
TRUE
if it succeeds,
FALSE otherwise.
bool_t xdrrec_eof(XDR *xdrs);
This routine can be invoked only on streams created by
xdrrec_create(). After consuming the rest of the current record in the
stream, this routine returns TRUE if there is no more data in the
stream's input buffer. It returns FALSE if there is additional data in
the stream's input buffer.
uint_t xdrrec_readbytes(XDR *xdrs,
caddr_t addr, uint_t nbytes);
This routine can be invoked only on streams created by
xdrrec_create(). It attempts to read nbytes bytes from the
XDR stream into the buffer pointed to by addr. Upon success this
routine returns the number of bytes read. Upon failure, it returns
−1. A return value of 0 indicates an end of record.
bool_t xdrrec_skiprecord(XDR
*xdrs);
This routine can be invoked only on streams created by
xdrrec_create(). See
xdr_create(3NSL). It tells the
XDR
implementation that the rest of the current record in the stream's input
buffer should be discarded. This routine returns
TRUE if it succeeds,
FALSE otherwise.
bool_t xdr_setpos(XDR *xdrs, const
uint_t pos);
A macro that invokes the set position routine associated
with the
XDR stream
xdrs. The parameter
pos is a position
value obtained from
xdr_getpos(). This routine returns
TRUE if
the
XDR stream was repositioned, and
FALSE otherwise.
Warning: it is difficult to reposition some types of XDR
streams, so this routine may fail with one type of stream and succeed with
another. Therefore, applications written for portability should not depend
on this feature.
uint_t xdr_sizeof(xdrproc_t func, void
*data);
This routine returns the number of bytes required to
encode data using the XDR filter function func, excluding
potential overhead such as RPC headers or record markers. 0 is
returned on error. This information might be used to select between transport
protocols, or to determine the buffer size for various lower levels of
RPC client and server creation routines, or to allocate storage when
XDR is used outside of the RPC subsystem.