xdr_complex(3N) UNIX System V xdr_complex(3N)
NAME
xdrcomplex: xdrarray, xdrbytes, xdropaque, xdrpointer,
xdrreference, xdrstring, xdrunion, xdrvector, xdrwrapstring -
library routines for external data representation
DESCRIPTION
XDR library routines allow C programmers to describe complex 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 are the XDR library routines for complex data
structures. They require the creation of XDR stream [see
xdrcreate(3N)].
Routines
See rpc(3N) for the definition of the XDR data structure.
#include <rpc/xdr.h>
boolt
xdrarray(XDR *xdrs, caddrt *arrp, uint *sizep,
const uint maxsize, const uint elsize,
const xdrproct elproc);
xdrarray translates between variable-length arrays and their
corresponding external representations. The parameter arrp is the
address of the pointer to the array, while sizep is the address of
the element count of the array; this element count cannot exceed
maxsize. The parameter elsize is the sizeof each of the array's
elements, and elproc is an XDR routine that translates between the
array elements' C form and their external representation. This
routine returns 1 if it succeeds, 0 otherwise.
boolt
xdrbytes(XDR *xdrs, char **sp, uint *sizep,
const uint maxsize);
xdrbytes translates between counted byte strings and their
external representations. The parameter sp is the address of the
string pointer. The length of the string is located at address
sizep; strings cannot be longer than maxsize. This routine returns
1 if it succeeds, 0 otherwise.
boolt
xdropaque(XDR *xdrs, caddrt cp, const uint cnt);
xdropaque translates between fixed size opaque data and its
external representation. The parameter cp is the address of the
opaque object, and cnt is its size in bytes. This routine returns
1 if it succeeds, 0 otherwise.
10/89 Page 1
xdr_complex(3N) UNIX System V xdr_complex(3N)
boolt
xdrpointer(XDR *xdrs, char **objpp, uint objsize,
const xdrproct xdrobj);
Like xdrreference except that it serializes NULL pointers, whereas
xdrreference does not. Thus, xdrpointer can represent recursive
data structures, such as binary trees or linked lists.
boolt
xdrreference(XDR *xdrs, caddrt *pp, uint size,
const xdrproct proc);
xdrreference provides pointer chasing within structures. The
parameter pp is the address of the pointer; size is the sizeof the
structure that *pp points to; and proc is an XDR procedure that
translates the structure between its C form and its external
representation. This routine returns 1 if it succeeds, 0
otherwise.
Note: this routine does not understand NULL pointers. Use
xdrpointer instead.
boolt
xdrstring(XDR *xdrs, char **sp, const uint maxsize);
xdrstring translates between C strings and their corresponding
external representations. Strings cannot be longer than maxsize.
Note: sp is the address of the string's pointer. This routine
returns 1 if it succeeds, 0 otherwise.
boolt
xdrunion(XDR *xdrs, enumt *dscmp, char *unp,
const struct xdrdiscrim *choices,
const boolt (*defaultarm)(const XDR *, const char *,
const int));
xdrunion translates between a discriminated C union and its
corresponding external representation. It first translates the
discriminant of the union located at dscmp. This discriminant is
always an enumt. Next the union located at unp is translated.
The parameter choices is a pointer to an array of xdrdiscrim
structures. Each structure contains an ordered pair of [value,
proc]. If the union's discriminant is equal to the associated
value, then the proc is called to translate the union. The end of
the xdrdiscrim structure array is denoted by a routine of value
NULL. If the discriminant is not found in the choices array, then
the defaultarm procedure is called (if it is not NULL). Returns 1
if it succeeds, 0 otherwise.
boolt
xdrvector(XDR *xdrs, char *arrp, const uint size,
const uint elsize, const xdrproct elproc);
Page 2 10/89
xdr_complex(3N) UNIX System V xdr_complex(3N)
xdrvector translates between fixed-length arrays and their
corresponding external representations. The parameter arrp is the
address of the pointer to the array, while size is is the element
count of the array. The parameter elsize is the sizeof each of the
array's elements, and elproc is an XDR routine that translates
between the array elements' C form and their external
representation. This routine returns 1 if it succeeds, 0
otherwise.
boolt
xdrwrapstring(XDR *xdrs, char **sp);
A routine that calls xdrstring(xdrs, sp, maxuint); where maxuint
is the maximum value of an unsigned integer.
Many routines, such as xdrarray, xdrpointer and xdrvector take a
function pointer of type xdrproct, which takes two arguments.
xdrstring, one of the most frequently used routines, requires
three arguments, while xdrwrapstring only requires two. For these
routines, xdrwrapstring is desirable. This routine returns 1 if
it succeeds, 0 otherwise.
SEE ALSO
rpc(3N), xdradmin(3N), xdrcreate(3N), xdrsimple(3N)
10/89 Page 3