xdr_bytes()--Translate between Counted Byte Arrays and Their XDR


  Syntax
 #include <rpc/xdr.h>

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

  Service Program Name: QZNFTRPC

  Default Public Authority: *USE

  Threadsafe: No

The xdr_bytes() function is a filter primitive that translates between counted byte arrays and their external representations. This function treats a subset of generic arrays in which the size of array elements is known to be 1 and the external description of each element is built-in. The length of the byte sequence is explicitly located in an unsigned integer. The byte sequence is not ended by a null character. The external representation of the bytes is the same as their internal representation.


Parameters

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

sp  (I/O) 
The address of the pointer to the byte array. If *sp==NULL and the stream is being decoded, then XDR allocates the needed amount of memory.

sizep  (I/O) 
A pointer to the length of the byte area. The value of this parameter cannot exceed the value of the maxsize parameter.

maxsize  (Input) 
The maximum number of bytes allowed when XDR encodes or decodes messages.

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_bytes() is used:

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

#define ARRAY_SIZE 256

typedef struct xarray
{
        int size;
        char *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_bytes(
                 xdrs,
                 (&(p_xarray->p_array)),
                 &(p_xarray->size),
                 MAX_INT);
}


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