xref: /illumos-gate/usr/src/man/man3nsl/xdr_create.3nsl (revision 5d9d9091f564c198a760790b0bfa72c44e17912b)
te
Copyright 1989 AT&T
Copyright (C) 2000, Sun Microsystems, Inc. All Rights Reserved
The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
XDR_CREATE 3NSL "Sep 26, 2000"
NAME
xdr_create, xdr_destroy, xdrmem_create, xdrrec_create, xdrstdio_create - library routines for external data representation stream creation
SYNOPSIS

#include <rpc/xdr.h>

void xdr_destroy(XDR *xdrs);

void xdrmem_create(XDR *xdrs, const caddr_t addr, const uint_t size,
 const enum xdr_op op);

void xdrrec_create(XDR *xdrs, const uint_t sendsz, const uint_t recvsz,
 const caddr_t handle, const int (*readit)const void *read_handle,
 char *buf, const int len, const int (*writeit)
 const void *write_handle, const char *buf, const int len);

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

The XDR library routines allow C programmers to describe arbitrary 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 deal with the creation of XDR streams, which must be created before any data can be translated into XDR format.

"Routines"

See rpc(3NSL) for the definition of the XDR CLIENT and SVCXPRT data structures. Any buffers passed to the XDR routines must be properly aligned. Use malloc(3C) to allocate these buffers or be sure that the buffer address is divisible evenly by four. xdr_destroy()

A macro that invokes the destroy routine associated with the XDR stream, xdrs. Private data structures associated with the stream are freed. Using xdrs after xdr_destroy() is invoked is undefined.

xdrmem_create()

This routine 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 less than size bytes long. The op determines the direction of the XDR stream. The value of op can be either XDR_ENCODE, XDR_DECODE, or XDR_FREE.

xdrrec_create()

This routine initializes the read-oriented XDR stream object pointed to by xdrs. The stream's data is written to a buffer of size sendsz. A value of 0 indicates the system should use a suitable default. The stream's data is read from a buffer of size recvsz. It too can be set to a suitable default by passing a 0 value. When a stream's output buffer is full, writeit is called. Similarly, when a stream's input buffer is empty, xdrrec_create() calls readit. The behavior of these two routines is similar to the system calls read() and write(), except that an appropriate handle, read_handle or write_handle, is passed to the former routines as the first parameter instead of a file descriptor. See read(2) and write(2), respectively. The XDR stream's op field must be set by the caller. This XDR stream implements an intermediate record stream. Therefore, additional bytes in the stream are provided for record boundary information.

xdrstdio_create()

This routine 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. The value of op can be either XDR_ENCODE, XDR_DECODE, or XDR_FREE. The destroy routine associated with XDR streams calls fflush() on the file stream, but never fclose(). See fclose(3C).

A failure of any of these functions can be detected by first initializing the x_ops field in the XDR structure (xdrs-> x_ops) to NULL before calling the xdr*_create() function. If the x_ops field is still NULL, after the return from the xdr*_create() function, the call has failed. If the x_ops field contains some other value, assume that the call has succeeded.

ATTRIBUTES

See attributes(7) for descriptions of the following attributes:

ATTRIBUTE TYPE ATTRIBUTE VALUE
MT-Level MT-Safe
SEE ALSO

read (2), write (2), fclose (3C), malloc (3C), rpc (3NSL), xdr_admin (3NSL), xdr_complex (3NSL), xdr_simple (3NSL), attributes (7)