xdr_array()--Translate between Arrays and Their XDR


  Syntax
 #include <rpc/xdr.h>

 bool_t xdr_array(XDR *xdrs,
                  caddr_t *arrp,
                  u_int *sizep,
                  const u_int maxsize,
                  const u_int elsize,
                  const xdrproc_t elproc);

  Service Program Name: QZNFTRPC

  Default Public Authority: *USE

  Threadsafe: No

The xdr_array() function is a filter primitive that translates between variable-length arrays and their corresponding external representations. This function is called to encode or decode each element of the array.


Parameters

xdrs  (Input) 
A pointer to the eXternal Data Representation (XDR) stream handle.

arrp  (I/O) 
The address of the pointer to the array. If *arrp==NULL and the array is being deserialized, XDR allocates an array of the appropriate size and sets this parameter to point to that array.

sizep  (I/O) 
The address of the element count of the array. The element count cannot exceed the value for the maxsize parameter.

maxsize  (Input) 
The maximum number of array elements.

elsize  (Input) 
The byte size of each of the array elements.

elproc  (Input) 
Translates between the C form of the array elements and their external representations. This parameter is an XDR filter.

Authorities

No authorization is required.


Return Value

TRUE (1) Successful
FALSE (0) Unsuccessful


Error Conditions

None.


Error Messages

Message ID Error Message Text
CPE3418 E Possible APAR condition or hardware failure.
CPF3CF2 E Error(s) occurred during running of &1 API.
CPF9872 E Program or service program &1 in library &2 ended. Reason code &3.


Example

See Code disclaimer information for information pertaining to code examples.

The following example shows how xdr_array() is used:

#include <stdio.h>
#include <values.h>
#include <xdr.h>

#define ARRAY_SIZE 256

typedef struct xarray
{
        int size;
        int *p_array;
} xarray ;

bool_t xdr_xarray(XDR *xdrs, xarray *p_xarray )
{
     /*
      * Force XDR to allocate memory while decoding
      */
     if((xdrs->x_op==XDR_DECODE)&&
     (p_xarray->p_array!=NULL))
     {
        free(p_xarray->p_array);
        p_xarray->p_array=NULL;
     }
     /*
      *  This code has a  dual job :
      *  A) While decoding, it allocated memory, stores the decoded
      *          xarray in it, and updates size field in xarray
      *          struct.
      *  B) While decoding it stores xarray's size and the data
      *          itself in XDR.
      */
    return xdr_array(
                 xdrs,
                 (char**)(&(p_xarray->p_array)),
                 &(p_xarray->size),
                 MAX_INT,
                 sizeof(int),
                 (xdrproc_t)xdr_int))

}


API introduced: V4R2
Top | Remote Procedure Call (RPC) APIs | APIs by category