1 .\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
3 .\" %%%LICENSE_START(BSD_ONELINE_CDROM)
4 .\" This page was taken from the 4.4BSD-Lite CDROM (BSD license)
7 .\" @(#)xdr.3n 2.2 88/08/03 4.0 RPCSRC; from 1.16 88/03/14 SMI
9 .\" 2007-12-30, mtk, Convert function prototypes to modern C syntax
11 .TH XDR 3 2007-12-30 "" "Linux Programmer's Manual"
13 xdr \- library routines for external data representation
14 .SH SYNOPSIS AND DESCRIPTION
16 These routines allow C programmers to describe
17 arbitrary data structures in a machine-independent fashion.
18 Data for remote procedure calls are transmitted using these
21 The prototypes below are declared in
23 and make use of the following types:
27 .BI "typedef int " bool_t ;
29 .BI "typedef bool_t (*" xdrproc_t ") (XDR *, void *,...);"
33 For the declaration of the
39 .BI "bool_t xdr_array(XDR *" xdrs ", char **" arrp ", unsigned int *" sizep ,
40 .BI " unsigned int " maxsize ", unsigned int " elsize ,
41 .BI " xdrproc_t " elproc );
44 A filter primitive that translates between variable-length arrays
45 and their corresponding external representations.
48 is the address of the pointer to the array, while
50 is the address of the element count of the array;
51 this element count cannot exceed
57 each of the array's elements, and
59 is an XDR filter that translates between
60 the array elements' C form, and their external
62 This routine returns one if it succeeds, zero otherwise.
65 .BI "bool_t xdr_bool(XDR *" xdrs ", bool_t *" bp );
68 A filter primitive that translates between booleans (C
70 and their external representations.
71 When encoding data, this
72 filter produces values of either one or zero.
73 This routine returns one if it succeeds, zero otherwise.
76 .BI "bool_t xdr_bytes(XDR *" xdrs ", char **" sp ", unsigned int *" sizep ,
77 .BI " unsigned int " maxsize );
80 A filter primitive that translates between counted byte
81 strings and their external representations.
84 is the address of the string pointer.
86 string is located at address
88 strings cannot be longer than
90 This routine returns one if it succeeds, zero otherwise.
93 .BI "bool_t xdr_char(XDR *" xdrs ", char *" cp );
96 A filter primitive that translates between C characters
97 and their external representations.
98 This routine returns one if it succeeds, zero otherwise.
99 Note: encoded characters are not packed, and occupy 4 bytes each.
100 For arrays of characters, it is worthwhile to
108 .BI "void xdr_destroy(XDR *" xdrs );
111 A macro that invokes the destroy routine associated with the XDR stream,
113 Destruction usually involves freeing private data structures
114 associated with the stream.
122 .BI "bool_t xdr_double(XDR *" xdrs ", double *" dp );
125 A filter primitive that translates between C
127 precision numbers and their external representations.
128 This routine returns one if it succeeds, zero otherwise.
131 .BI "bool_t xdr_enum(XDR *" xdrs ", enum_t *" ep );
134 A filter primitive that translates between C
136 (actually integers) and their external representations.
137 This routine returns one if it succeeds, zero otherwise.
140 .BI "bool_t xdr_float(XDR *" xdrs ", float *" fp );
143 A filter primitive that translates between C
145 and their external representations.
146 This routine returns one if it succeeds, zero otherwise.
149 .BI "void xdr_free(xdrproc_t " proc ", char *" objp );
152 Generic freeing routine.
153 The first argument is the XDR routine for the object being freed.
154 The second argument is a pointer to the object itself.
155 Note: the pointer passed to this routine is
157 freed, but what it points to
162 .BI "unsigned int xdr_getpos(XDR *" xdrs );
165 A macro that invokes the get-position routine
166 associated with the XDR stream,
168 The routine returns an unsigned integer,
169 which indicates the position of the XDR byte stream.
170 A desirable feature of XDR
171 streams is that simple arithmetic works with this number,
172 although the XDR stream instances need not guarantee this.
175 .BI "long *xdr_inline(XDR *" xdrs ", int " len );
178 A macro that invokes the inline routine associated with the XDR stream,
180 The routine returns a pointer
181 to a contiguous piece of the stream's buffer;
183 is the byte length of the desired buffer.
184 Note: pointer is cast to
190 if it cannot allocate a contiguous piece of a buffer.
191 Therefore the behavior may vary among stream instances;
192 it exists for the sake of efficiency.
195 .BI "bool_t xdr_int(XDR *" xdrs ", int *" ip );
198 A filter primitive that translates between C integers
199 and their external representations.
200 This routine returns one if it succeeds, zero otherwise.
203 .BI "bool_t xdr_long(XDR *" xdrs ", long *" lp );
206 A filter primitive that translates between C
208 integers and their external representations.
209 This routine returns one if it succeeds, zero otherwise.
212 .BI "void xdrmem_create(XDR *" xdrs ", char *" addr ", unsigned int " size ,
213 .BI " enum xdr_op " op );
216 This routine initializes the XDR stream object pointed to by
218 The stream's data is written to, or read from,
219 a chunk of memory at location
221 whose length is no more than
226 determines the direction of the XDR stream (either
233 .BI "bool_t xdr_opaque(XDR *" xdrs ", char *" cp ", unsigned int " cnt );
236 A filter primitive that translates between fixed size opaque data
237 and its external representation.
240 is the address of the opaque object, and
242 is its size in bytes.
243 This routine returns one if it succeeds, zero otherwise.
246 .BI "bool_t xdr_pointer(XDR *" xdrs ", char **" objpp ,
247 .BI " unsigned int " objsize ", xdrproc_t " xdrobj );
252 except that it serializes null pointers, whereas
258 recursive data structures, such as binary trees or
262 .BI "void xdrrec_create(XDR *" xdrs ", unsigned int " sendsize ,
263 .BI " unsigned int " recvsize ", char *" handle ,
264 .BI " int (*" readit ") (char *, char *, int),"
265 .BI " int (*" writeit ") (char *, char *, int));"
268 This routine initializes the XDR stream object pointed to by
270 The stream's data is written to a buffer of size
272 a value of zero indicates the system should use a suitable default.
273 The stream's data is read from a buffer of size
275 it too can be set to a suitable default by passing a zero value.
276 When a stream's output buffer is full,
279 Similarly, when a stream's input buffer is empty,
282 The behavior of these two routines is similar to
289 is passed to the former routines as the first argument.
290 Note: the XDR stream's
292 field must be set by the caller.
294 Warning: this XDR stream implements an intermediate record stream.
295 Therefore there are additional bytes in the stream
296 to provide record boundary information.
299 .BI "bool_t xdrrec_endofrecord(XDR *" xdrs ", int " sendnow );
302 This routine can be invoked only on streams created by
303 .BR xdrrec_create ().
304 The data in the output buffer is marked as a completed record,
305 and the output buffer is optionally written out if
308 This routine returns one if it succeeds, zero otherwise.
311 .BI "bool_t xdrrec_eof(XDR *" xdrs );
314 This routine can be invoked only on streams created by
315 .BR xdrrec_create ().
316 After consuming the rest of the current record in the stream,
317 this routine returns one if the stream has no more input,
321 .BI "bool_t xdrrec_skiprecord(XDR *" xdrs );
324 This routine can be invoked only on
326 .BR xdrrec_create ().
327 It tells the XDR implementation that the rest of the current record
328 in the stream's input buffer should be discarded.
329 This routine returns one if it succeeds, zero otherwise.
332 .BI "bool_t xdr_reference(XDR *" xdrs ", char **" pp ", unsigned int " size ,
333 .BI " xdrproc_t " proc );
336 A primitive that provides pointer chasing within structures.
339 is the address of the pointer;
347 is an XDR procedure that filters the structure
348 between its C form and its external representation.
349 This routine returns one if it succeeds, zero otherwise.
351 Warning: this routine does not understand null pointers.
357 .BI "xdr_setpos(XDR *" xdrs ", unsigned int " pos );
360 A macro that invokes the set position routine associated with
365 is a position value obtained from
367 This routine returns one if the XDR stream could be repositioned,
370 Warning: it is difficult to reposition some types of XDR
371 streams, so this routine may fail with one
372 type of stream and succeed with another.
375 .BI "bool_t xdr_short(XDR *" xdrs ", short *" sp );
378 A filter primitive that translates between C
380 integers and their external representations.
381 This routine returns one if it succeeds, zero otherwise.
384 .BI "void xdrstdio_create(XDR *" xdrs ", FILE *" file ", enum xdr_op " op );
387 This routine initializes the XDR stream object pointed to by
389 The XDR stream data is written to, or read from, the
395 determines the direction of the XDR stream (either
401 Warning: the destroy routine associated with such XDR streams calls
409 .BI "bool_t xdr_string(XDR *" xdrs ", char **" sp ", unsigned int " maxsize );
412 A filter primitive that translates between C strings and
413 their corresponding external representations.
414 Strings cannot be longer than
418 is the address of the string's pointer.
419 This routine returns one if it succeeds, zero otherwise.
422 .BI "bool_t xdr_u_char(XDR *" xdrs ", unsigned char *" ucp );
425 A filter primitive that translates between
427 C characters and their external representations.
428 This routine returns one if it succeeds, zero otherwise.
431 .BI "bool_t xdr_u_int(XDR *" xdrs ", unsigned *" up );
434 A filter primitive that translates between C
436 integers and their external representations.
437 This routine returns one if it succeeds, zero otherwise.
440 .BI "bool_t xdr_u_long(XDR *" xdrs ", unsigned long *" ulp );
443 A filter primitive that translates between C
445 integers and their external representations.
446 This routine returns one if it succeeds, zero otherwise.
449 .BI "bool_t xdr_u_short(XDR *" xdrs ", unsigned short *" usp );
452 A filter primitive that translates between C
454 integers and their external representations.
455 This routine returns one if it succeeds, zero otherwise.
458 .BI "bool_t xdr_union(XDR *" xdrs ", int *" dscmp ", char *" unp ,
459 .BI " struct xdr_discrim *" choices ,
460 .BI " xdrproc_t " defaultarm "); /* may equal NULL */"
463 A filter primitive that translates between a discriminated C
465 and its corresponding external representation.
467 translates the discriminant of the union located at
469 This discriminant is always an
471 Next the union located at
476 is a pointer to an array of
479 Each structure contains an ordered pair of
480 .RI [ value , proc ].
481 If the union's discriminant is equal to the associated
485 is called to translate the union.
488 structure array is denoted by a routine of value NULL.
489 If the discriminant is not found in the
493 procedure is called (if it is not NULL).
494 Returns one if it succeeds, zero otherwise.
497 .BI "bool_t xdr_vector(XDR *" xdrs ", char *" arrp ", unsigned int " size ,
498 .BI " unsigned int " elsize ", xdrproc_t " elproc );
501 A filter primitive that translates between fixed-length arrays
502 and their corresponding external representations.
505 is the address of the pointer to the array, while
507 is the element count of the array.
512 each of the array's elements, and
514 is an XDR filter that translates between
515 the array elements' C form, and their external
517 This routine returns one if it succeeds, zero otherwise.
520 .BI "bool_t xdr_void(void);"
523 This routine always returns one.
524 It may be passed to RPC routines that require a function argument,
525 where nothing is to be done.
528 .BI "bool_t xdr_wrapstring(XDR *" xdrs ", char **" sp );
531 A primitive that calls
532 .B "xdr_string(xdrs, sp,MAXUN.UNSIGNED );"
535 is the maximum value of an unsigned integer.
536 .BR xdr_wrapstring ()
537 is handy because the RPC package passes a maximum of two XDR
538 routines as arguments, and
540 one of the most frequently used primitives, requires three.
541 Returns one if it succeeds, zero otherwise.
545 The following manuals:
547 eXternal Data Representation Standard: Protocol Specification
549 eXternal Data Representation: Sun Technical Notes
551 .IR "XDR: External Data Representation Standard" ,
552 RFC\ 1014, Sun Microsystems, Inc.,