MirOS Manual: xdr(3), xdrmem_create(3), xdrrec_create(3), xdrrec_endofrecord(3), xdrrec_eof(3), xdrrec_skiprecord(3), xdrstdio_create(3), xdr_array(3), xdr_bool(3), xdr_bytes(3), xdr_char(3), xdr_destroy(3), xdr_double(3), xdr_enum(3), xdr_float(3), xdr_free(3), xdr_getpos(3), xdr_inline(3), xdr_int(3), xdr_long(3), xdr_opaque(3), xdr_pointer(3), xdr_reference(3), xdr_setpos(3), xdr_short(3), xdr_string(3), xdr_union(3), xdr_u_char(3), xdr_u_int(3), xdr_u_long(3), xdr_u_short(3), xdr_vector(3), xdr_void(3), xdr_wrapstring(3)

XDR(3)                     BSD 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 behavior
     may vary among stream instances; it exists for the sake of efficiency.

     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
     succeeds, 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() 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.

     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(), except 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 other-
     wise.

     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 discarded.
     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. Warning:
     this routine does not understand NULL pointers. Use xdr_pointer() in-
     stead.

     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 in-
     tegers 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
     translates the discriminant of the union located at dscmp. This discrim-
     inant 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
     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 struct xdr_discrim
     structure array is denoted by a routine of value NULL. If the discrim-
     inant is not found in the choices array, then the (*defaultarm)() pro-
     cedure is called (if it is not NULL). Returns one if it succeeds, zero
     otherwise.

     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
     succeeds, 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, RFC
     1014, USC-ISI.

MirOS BSD #10-current         February 16, 1988                              4

Generated on 2014-04-02 20:57:59 by $MirOS: src/scripts/roff2htm,v 1.79 2014/02/10 00:36:11 tg Exp $

These manual pages and other documentation are copyrighted by their respective writers; their source is available at our CVSweb, AnonCVS, and other mirrors. The rest is Copyright © 2002‒2014 The MirOS Project, Germany.
This product includes material provided by Thorsten Glaser.

This manual page’s HTML representation is supposed to be valid XHTML/1.1; if not, please send a bug report – diffs preferred.