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.
The
XDR
data structure is defined in the
RPC/XDR
Library Definitions of the
[a manual with the abbreviation NETP].
#include <rpc/xdr.h>
bool_t xdr_array(xdrs, arrp, sizep, maxsize, elsize, elproc) XDR *xdrs; char **arrp; u_int *sizep, maxsize, elsize; xdrproc_t elproc;
A filter primitive that translates between a variable-length
array and its 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 value is used
by the filter while encoding and is set by it while decoding;
the routine fails if the element count exceeds
maxsize.
The parameter
elsize
is the
sizeof
each of the array's elements, and
elproc
is an
XDR
filter that translates between
the array elements' C form, and their external
representation.
This routine returns
TRUE
if it succeeds,
FALSE
otherwise.
bool_t xdr_bytes(xdrs, arrp, sizep, maxsize) XDR *xdrs; char **arrp; u_int *sizep, maxsize;
A filter primitive that translates between an array of bytes
and its external representation.
It treats the array of bytes as opaque data.
The parameter
arrp
is the address of the array of bytes.
While decoding if
*arrp
is
NULL,
then the necessary storage is allocated to hold the array.
This storage can be freed by using
xdr_free()
(see
xdr_simple.3n
sizep
is the pointer to the actual length specifier for the array.
This value is
used by the filter while encoding and is set by it when decoding.
maxsize
is the maximum length of the array.
The routine fails if the actual length of the array is
greater than
maxsize
This routine returns
TRUE
if it succeeds,
FALSE
otherwise.
bool_t xdr_opaque(xdrs, cp, cnt) XDR *xdrs; char *cp; u_int cnt;
A filter primitive that 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
TRUE
if it succeeds,
FALSE
otherwise.
bool_t xdr_pointer(xdrs, objpp, objsize, objproc) XDR *xdrs; char **objpp; u_int objsize; xdrproc_t objproc;
Like
xdr_reference()
except that it serializes
NULL
pointers, whereas
xdr_reference()
does not.
Thus,
xdr_pointer()
can represent
recursive data structures, such as binary trees or
linked lists.
The parameter
objpp
is the address of the pointer;
objsize
is the
sizeof
the structure that
*objpp
points to; and
objproc
is an
XDR
procedure that filters the structure
between its C form and its external representation.
This routine returns
TRUE
if it succeeds,
FALSE
otherwise.
bool_t xdr_reference(xdrs, pp, size, proc) XDR *xdrs; char **pp; u_int size; xdrproc_t proc;
A primitive that 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 filters the structure between its C form and its external representation. This routine returns TRUE if it succeeds, FALSE otherwise.
Warning:
This routine does not understand
NULL
pointers. Use
xdr_pointer()
instead.
bool_t xdr_string(xdrs, strp, maxsize) XDR *xdrs; char **strp; u_int maxsize;
A filter primitive that translates between C strings and
their
corresponding external representations.
The routine fails if the string being translated
is longer than
maxsize.
strp
is the address of the pointer to the string. While decoding if
*strp
is
NULL,
then the necessary storage is allocated
to hold this
null-terminated string and
*strp
is set to point to this.
This storage can be freed by using
xdr_free()
(see
xdr_simple.3n
This routine returns
TRUE
if it succeeds,
FALSE
otherwise.
bool_t xdr_union(xdrs, dscmp, unp, choices, defaultarm) XDR *xdrs; int *dscmp; char *unp; struct xdr_discrim *choices; bool_t (*defaultarm) (); /* may be NULL */
A filter primitive that 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
enum_t.
Next the union located at
unp
is translated.
The parameter
choices
is a pointer to an array of
xdr_discrim
structures.
Each structure contains an ordered pair of
[value,proc].
If the union's discriminant is equal to any of the
values,
then the associated
proc
is called to translate the union.
The end of the
xdr_discrim
structure array is denoted by a
NULL
pointer.
If the discriminant is not found in the
choices
array, then the
defaultarm
procedure is called (if it is not
NULL).
This routine returns
TRUE
if it succeeds,
FALSE
otherwise.
bool_t xdr_vector(xdrs, arrp, size, elsize, elproc) XDR *xdrs; char *arrp; u_int size, elsize; xdrproc_t elproc;
A filter primitive that translates between fixed-length
arrays and their corresponding external representations.
The parameter
arrp
is the address of the array, while
size
is the element count of the array.
The parameter
elsize
is the
sizeof
each of the array's elements, and
elproc
is an
XDR
filter that translates between
the array elements' C form, and their external
representation.
This routine returns
TRUE
if it succeeds,
FALSE
otherwise.
bool_t xdr_wrapstring(xdrs, strp) XDR *xdrs; char **strp;
A primitive that calls xdr_string( xdrs, strp, MAXUNSIGNED ); where MAXUNSIGNED is the maximum value of an unsigned integer. xdr_wrapstring() is handy because the RPC package passes a maximum of two XDR routines as parameters, and xdr_string(), one of the most frequently used primitives, requires three. strp is the address of the pointer to the string. While decoding if *strp is NULL, then the necessary storage is allocated to hold the null-terminated string and *strp is set to point to this. This storage can be freed by using xdr_free() (see xdr_simple.3n This routine returns TRUE if it succeeds, FALSE otherwise.
Created by unroff & hp-tools. © somebody (See intro for details). All Rights Reserved. Last modified 11/5/97