7.2 Encode/Decode Routines for Non-XDR Data Types Using XDR Primitives

 bool_t
 xdr_mapping(register XDR *xdrs, mapping *objp)
 {
     if (!xdr_sequence_number(xdrs, &objp->Token))
         return (FALSE);
     if (!xdr_u_int(xdrs, &objp->MappingRecordCount))
         return (FALSE);
     if (!xdr_u_int(xdrs, &objp->TotalMappingRecordCount))
         return (FALSE);
  
     objp->MapArray = (mapping_record *) malloc (
         objp->MappingRecordCount * sizeof (mapping_record));
         
     if (!objp->MapArray)
         return (FALSE);
         
     if (!xdr_vector(xdrs,
                     (char *)objp->MapArray,
                     objp->MappingRecordCount,
                     sizeof (mapping_record),
                     (xdrproc_t) xdr_mapping_record))
         return (TRUE);
 }
  
  
 bool_t
 xdr_maps(register XDR *xdrs, maps *objp)
 {
     if (!xdr_sequence_number(xdrs, &objp->Token))
         return (FALSE);
     if (!xdr_u_int(xdrs, &objp->MappingRecordCount))
         return (FALSE);
     if (!xdr_u_int(xdrs, &objp->TotalMappingRecordCount))
         return (FALSE);
         
     objp->MapArray = (MapSvrMBCSMapString *) malloc (
         objp->MappingRecordCount * sizeof (MapSvrMBCSMapString));
         
     if (!objp->MapArray)
         return (FALSE);
         
     if (!xdr_vector(xdrs,
                     (char *)objp->MapArray,
                     objp->MappingRecordCount,
                     sizeof (MapSvrMBCSMapString),
                     (xdrproc_t) xdr_MapSvrMBCSMapString))
         return (FALSE);
  
     return (TRUE);
 }
  
  
 bool_t
 xdr_mappingW(register XDR *xdrs, mappingW *objp)
 {
     if (!xdr_sequence_number(xdrs, &objp->Token))
         return (FALSE);
     if (!xdr_u_int(xdrs, &objp->MappingRecordCount))
         return (FALSE);
     if (!xdr_u_int(xdrs, &objp->TotalMappingRecordCount))
         return (FALSE);
         
     objp->MapArray = (mapping_recordW *) malloc (
         objp->MappingRecordCount * sizeof (mapping_recordW));
  
     if (!objp->MapArray)
         return (FALSE);
  
     if (!xdr_vector(xdrs,
                     (char *)objp->MapArray,
                     objp->MappingRecordCount,
                     sizeof (mapping_recordW),
                     (xdrproc_t) xdr_mapping_recordW))
         return (FALSE);
  
     return (TRUE);
 }
  
  
 bool_t
 xdr_mapsW(register XDR *xdrs, mapsW *objp)
 {
     if (!xdr_sequence_number(xdrs, &objp->Token))
         return (FALSE);
     if (!xdr_u_int(xdrs, &objp->MappingRecordCount))
         return (FALSE);
     if (!xdr_u_int(xdrs, &objp->TotalMappingRecordCount))
         return (FALSE);
  
     objp->MapArray = (MapSvrUnicodeMapString *) malloc (
         objp->MappingRecordCount * sizeof (MapSvrUnicodeMapString));
  
     if (!objp->MapArray)
         return (FALSE);
  
     if (!xdr_vector(xdrs,
                     (char *)objp->MapArray,
                     objp->MappingRecordCount,
                     sizeof (MapSvrUnicodeMapString),
                     (xdrproc_t) xdr_MapSvrUnicodeMapString))
         return (FALSE);
         
     return (TRUE);
 }