OpenBSD manual page server

Manual Page Search Parameters

XDR(3)                    OpenBSD Programmer's Manual                   XDR(3)

NAME
     xdr_array, xdr_bool, xdr_bytes, xdr_char, xdr_destroy, xdr_double,
     xdr_enum, xdr_float, xdr_free, xdr_getpos, xdr_inline, xdr_int, xdr_long,
     xdrmem_create, xdr_opaque, xdr_pointer, xdrrec_create,
     xdrrec_endofrecord, xdrrec_eof, xdrrec_skiprecord, xdr_reference,
     xdr_setpos, xdr_short, xdrstdio_create, xdr_string, xdr_u_char,
     xdr_u_int, xdr_u_long, xdr_u_short, xdr_union, xdr_vector, xdr_void,
     xdr_wrapstring - library routines for external data representation

SYNOPSIS
     #include <sys/types.h>
     #include <rpc/xdr.h>

     int
     xdr_array(XDR *xdrs, char **arrp, u_int *sizep, u_int maxsize,
             u_int elsize, xdrproc_t elproc);

     int
     xdr_bool(XDR *xdrs, bool_t *bp);

     int
     xdr_bytes(XDR *xdrs, char **sp, u_int *sizep, u_int maxsize);

     int
     xdr_char(XDR *xdrs, char *cp);

     void
     xdr_destroy(XDR *xdrs);

     int
     xdr_double(XDR *xdrs, double *dp);

     int
     xdr_enum(XDR *xdrs, enum_t *ep);

     int
     xdr_float(XDR *xdrs, float *fp);

     void
     xdr_free(xdrproc_t proc, char *objp);

     u_int
     xdr_getpos(XDR *xdrs);

     long *
     xdr_inline(XDR *xdrs, int len);

     int
     xdr_int(XDR *xdrs, int *ip);

     int
     xdr_long(XDR *xdrs, long *lp);

     void
     xdrmem_create(XDR *xdrs, char *addr, u_int size, enum xdr_op op);

     int
     xdr_opaque(XDR *xdrs, char *cp, u_int cnt);

     int
     xdr_pointer(XDR *xdrs, char **objpp, u_int objsize, xdrproc_t xdrobj);

     void
     xdrrec_create(XDR *xdrs, u_int sendsize, u_int recvsize, char *handle,
             int (*readit)(), int (*writeit)());

     int
     xdrrec_endofrecord(XDR *xdrs, int sendnow);

     int
     xdrrec_eof(XDR *xdrs, int empty);

     int
     xdrrec_skiprecord(XDR *xdrs);

     int
     xdr_reference(XDR *xdrs, char **pp, u_int size, xdrproc_t proc);

     int
     xdr_setpos(XDR *xdrs, u_int pos);

     int
     xdr_short(XDR *xdrs, short *sp);

     void
     xdrstdio_create(XDR *xdrs, FILE *file, enum xdr_op op);

     int
     xdr_string(XDR *xdrs, char **sp, u_int maxsize);

     int
     xdr_u_char(XDR *xdrs, unsigned char *ucp);

     int
     xdr_u_int(XDR *xdrs, unsigned int *up);

     int
     xdr_u_long(XDR *xdrs, unsigned long *ulp);

     int
     xdr_u_short(XDR *xdrs, unsigned short *usp);

     int
     xdr_union(XDR *xdrs, int *dscmp, char *unp, struct xdr_discrim *choices,
             bool_t (*defaultarm)());

     int
     xdr_vector(XDR *xdrs, char *arrp, u_int size, u_int elsize,
             xdrproc_t elproc);

     int
     xdr_void(void);

     int
     xdr_wrapstring(XDR *xdrs, char **sp);

DESCRIPTION
     These routines allow C programmers to describe arbitrary data structures
     in a machine-independent fashion.  Data for remote procedure calls are
     transmitted using these routines.

     xdr_array() is a filter primitive that 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 ad-
     dress of the element count of the array; this element count cannot exceed
     maxsize. The parameter elsize is the size of each of the array's ele-
     ments, and elproc is an XDR filter that translates between the array ele-
     ments' C form, and their external representation.  This routine returns
     one if it succeeds, zero otherwise.
     xdr_bool() is a filter primitive that translates between booleans (C in-
     tegers) and their external representations.  When encoding data, this
     filter produces values of either one or zero.  This routine returns one
     if it succeeds, zero otherwise.

     xdr_bytes() is a filter primitive that translates between counted byte
     strings and their external representations.  The parameter sp is the ad-
     dress of the string pointer.  The length of the string is located at ad-
     dress sizep; strings cannot be longer than maxsize. This routine returns
     one if it succeeds, zero otherwise.

     xdr_char() is a filter primitive that translates between C characters and
     their external representations.  This routine returns one if it succeeds,
     zero otherwise.  Note: encoded characters are not packed, and occupy 4
     bytes each.  For arrays of characters, it is worthwhile to consider
     xdr_bytes(), xdr_opaque(), or xdr_string().

     xdr_destroy() is a macro that invokes the destroy routine associated with
     the XDR stream xdrs. Destruction usually involves freeing private data
     structures associated with the stream.  Using xdrs after invoking
     xdr_destroy() is undefined.

     xdr_double() is a filter primitive that translates between C double pre-
     cision numbers and their external representations.  This routine returns
     one if it succeeds, zero otherwise.

     xdr_enum() is a filter primitive that translates between the C enum type
     (actually an integer) and its external representations.  This routine re-
     turns one if it succeeds, zero otherwise.

     xdr_float() is a filter primitive that translates between the C float
     type and its external representations.  This routine returns one if it
     succeeds, zero otherwise.

     xdr_free() is a generic freeing routine.  The first argument is the XDR
     routine for the object being freed.  The second argument is a pointer to
     the object itself.  Note: the pointer passed to this routine is not
     freed, but what it points to is freed (recursively).

     xdr_getpos() is 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.

     xdr_inline() is 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.
     Note: pointer is cast to long *. Warning: xdr_inline() may return NULL if
     it cannot allocate a contiguous piece of a buffer.  Therefore the behav-
     ior may vary among stream instances; it exists for the sake of efficien-
     cy.

     xdr_int() is a filter primitive that translates between C integers and
     their external representations.  This routine returns one if it succeeds,
     zero otherwise.

     xdr_long() is a filter primitive that translates between C long integers
     and their external representations.  This routine returns one if it suc-
     ceeds, zero otherwise.

     xdrmem_create() is a routine which initializes the XDR stream object
     pointed to by xdrs. The stream's data is written to, or read from, a
     chunk of memory at location addr whose length is no more than size bytes
     long.  The op determines the direction of the XDR stream (either
     XDR_ENCODE, XDR_DECODE, or XDR_FREE).
     xdr_opaque() is a filter primitive that translates between fixed size
     opaque data and its external representation.  The parameter cp is the ad-
     dress of the opaque object, and cnt is its size in bytes.  This routine
     returns one if it succeeds, zero otherwise.

     xdr_pointer() is like xdr_reference() execpt that it serializes NULL
     pointers, whereas xdr_reference() does not.  Thus, xdr_pointer() can rep-
     resent recursive data structures, such as binary trees or linked lists.

     xdrrec_create() is a routine which initializes the XDR stream object
     pointed to by xdrs. The stream's data is written to a buffer of size
     sendsize; a value of zero indicates the system should use a suitable de-
     fault.  The stream's data is read from a buffer of size recvsize; it too
     can be set to a suitable default by passing a zero value.  When a
     stream's output buffer is full, (*writeit)() is called.  Similarly, when
     a stream's input buffer is empty, (*readit)() is called.  The behavior of
     these two routines is similar to the system calls read() and write(), ex-
     cept that handle is passed to the former routines as the first parameter.
     Note: the XDR stream's op field must be set by the caller.  Warning: this
     XDR stream implements an intermediate record stream.  Therefore there are
     additional bytes in the stream to provide record boundary information.

     xdrrec_endofrecord() is a routine which can be invoked only on streams
     created by xdrrec_create().  The data in the output buffer is marked as a
     completed record, and the output buffer is optionally written out if
     sendnow is non-zero.  This routine returns one if it succeeds, zero oth-
     erwise.

     xdrrec_eof() is a routine which can be invoked only on streams created by
     xdrrec_create().  After consuming the rest of the current record in the
     stream, this routine returns one if the stream has no more input, zero
     otherwise.

     xdrrec_skiprecord() is a routine which can be invoked only on streams
     created by xdrrec_create().  It tells the XDR implementation that the
     rest of the current record in the stream's input buffer should be dis-
     carded.  This routine returns one if it succeeds, zero otherwise.

     xdr_reference() is a primitive that provides pointer chasing within
     structures.  The parameter pp is the address of the pointer; size is the
     size of the structure that *pp points to; and proc is an XDR procedure
     that filters the structure between its C form and its external represen-
     tation.  This routine returns one if it succeeds, zero otherwise.  Warn-
     ing: this routine does not understand NULL pointers.  Use xdr_pointer()
     instead.

     xdr_setpos() is 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 one if the XDR stream could be
     repositioned, and zero 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.

     xdr_short() is a filter primitive that translates between C short inte-
     gers and their external representations.  This routine returns one if it
     succeeds, zero otherwise.

     xdrstdio_create() is a routine which initializes the XDR stream object
     pointed to by xdrs. The XDR stream data is written to, or read from, the
     Standard I/O stream file. The parameter op determines the direction of
     the XDR stream (either XDR_ENCODE, XDR_DECODE, or XDR_FREE). Warning: the
     destroy routine associated with such XDR streams calls fflush() on the
     file stream, but never fclose().

     xdr_string() is a filter primitive that 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 rou-
     tine returns one if it succeeds, zero otherwise.

     xdr_u_char() is a filter primitive that translates between unsigned C
     characters and their external representations.  This routine returns one
     if it succeeds, zero otherwise.

     xdr_u_int() is a filter primitive that translates between C unsigned in-
     tegers and their external representations.  This routine returns one if
     it succeeds, zero otherwise.

     xdr_u_long() is a filter primitive that translates between C unsigned
     long integers and their external representations.  This routine returns
     one if it succeeds, zero otherwise.

     xdr_u_short() is a filter primitive that translates between C unsigned
     short integers and their external representations.  This routine returns
     one if it succeeds, zero otherwise.

     xdr_union() is a filter primitive that translates between a discriminated
     C union and its corresponding external representation.  It first trans-
     lates 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 struct xdr_discrim struc-
     tures.  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 struct xdr_discrim
     structure array is denoted by a routine of value NULL. If the discrimi-
     nant is not found in the choices array, then the (*defaultarm)() proce-
     dure is called (if it is not NULL). Returns one if it succeeds, zero oth-
     erwise.

     xdr_vector() is a filter primitive that 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 the ele-
     ment count of the array.  The parameter elsize is the size of 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 one if it succeeds, zero otherwise.

     xdr_void() is a routine which always returns one.  It may be passed to
     RPC routines that require a function parameter, but where nothing is to
     be done.

     xdr_wrapstring() is a primitive that calls xdr_string(xdrs, sp,
     MAXUN.UNSIGNED ); where MAXUN.UNSIGNED is the maximum value of an un-
     signed 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.  Returns one if it suc-
     ceeds, zero otherwise.

SEE ALSO
     rpc(3)

     eXternal Data Representation Standard: Protocol Specification.

     eXternal Data Representation: Sun Technical Notes.

     Sun Microsystems, Inc., XDR: External Data Representation Standard,
     RFC1014, USC-ISI.

OpenBSD 3.0                    February 16, 1988                             5