#if !defined(lint) && defined(SCCSIDS)
static char sccsid[] = "@(#)xdr_mem.c 1.19 87/08/11 Copyr 1984 Sun Micro";
#endif
#include <gssrpc/types.h>
#include <gssrpc/xdr.h>
#include "dyn.h"
static bool_t xdralloc_putlong(XDR *, long *);
static bool_t xdralloc_putbytes(XDR *, caddr_t, unsigned int);
static unsigned int xdralloc_getpos(XDR *);
static rpc_int32 * xdralloc_inline(XDR *, int);
static void xdralloc_destroy(XDR *);
static bool_t xdralloc_notsup_getlong(XDR *, long *);
static bool_t xdralloc_notsup_getbytes(XDR *, caddr_t, unsigned int);
static bool_t xdralloc_notsup_setpos(XDR *, unsigned int);
static struct xdr_ops xdralloc_ops = {
xdralloc_notsup_getlong,
xdralloc_putlong,
xdralloc_notsup_getbytes,
xdralloc_putbytes,
xdralloc_getpos,
xdralloc_notsup_setpos,
xdralloc_inline,
xdralloc_destroy,
};
void xdralloc_create(xdrs, op)
register XDR *xdrs;
enum xdr_op op;
{
xdrs->x_op = op;
xdrs->x_ops = &xdralloc_ops;
xdrs->x_private = (caddr_t) DynCreate(sizeof(char), -4);
}
caddr_t xdralloc_getdata(xdrs)
XDR *xdrs;
{
return (caddr_t) DynGet((DynObject) xdrs->x_private, 0);
}
void xdralloc_release(xdrs)
XDR *xdrs;
{
DynRelease((DynObject) xdrs->x_private);
}
static void xdralloc_destroy(xdrs)
XDR *xdrs;
{
DynDestroy((DynObject) xdrs->x_private);
}
static bool_t xdralloc_notsup_getlong(xdrs, lp)
register XDR *xdrs;
long *lp;
{
return FALSE;
}
static bool_t xdralloc_putlong(xdrs, lp)
register XDR *xdrs;
long *lp;
{
int l = htonl((rpc_u_int32) *lp);
if (DynInsert((DynObject) xdrs->x_private,
DynSize((DynObject) xdrs->x_private), &l,
sizeof(int)) != DYN_OK)
return FALSE;
return (TRUE);
}
static bool_t xdralloc_notsup_getbytes(xdrs, addr, len)
register XDR *xdrs;
caddr_t addr;
register unsigned int len;
{
return FALSE;
}
static bool_t xdralloc_putbytes(xdrs, addr, len)
register XDR *xdrs;
caddr_t addr;
register unsigned int len;
{
if (DynInsert((DynObject) xdrs->x_private,
DynSize((DynObject) xdrs->x_private),
addr, (int) len) != DYN_OK)
return FALSE;
return TRUE;
}
static unsigned int xdralloc_getpos(xdrs)
register XDR *xdrs;
{
return DynSize((DynObject) xdrs->x_private);
}
static bool_t xdralloc_notsup_setpos(xdrs, lp)
register XDR *xdrs;
unsigned int lp;
{
return FALSE;
}
static rpc_int32 *xdralloc_inline(xdrs, len)
register XDR *xdrs;
int len;
{
return (rpc_int32 *) 0;
}