XDR_ADMIN(3NSL) Networking Services Library Functions XDR_ADMIN(3NSL)


NAME


xdr_admin, xdr_control, xdr_getpos, xdr_inline, xdrrec_endofrecord,
xdrrec_eof, xdrrec_readbytes, xdrrec_skiprecord, xdr_setpos, xdr_sizeof -
library routines for external data representation

DESCRIPTION


XDR library routines allow C programmers to describe arbitrary data
structures in a machine-independent fashion. Protocols such as remote
procedure calls (RPC) use these routines to describe the format of the
data.


These routines deal specifically with the management of the XDR stream.

Routines


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.


ATTRIBUTES


See attributes(5) for descriptions of the following attributes:


+---------------+-----------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+-----------------+
|MT-Level | Safe |
+---------------+-----------------+

SEE ALSO


malloc(3C), rpc(3NSL), xdr_complex(3NSL), xdr_create(3NSL),
xdr_simple(3NSL), attributes(5)


May 15, 2017 XDR_ADMIN(3NSL)