#include <afsconfig.h>
#include <afs/param.h>
-RCSID("$Header$");
-
-#ifndef NeXT
-
/*
* xdr_mem.h, XDR implementation using memory buffers.
*
*
*/
-#include "xdr.h"
-#ifndef AFS_NT40_ENV
-#include <netinet/in.h>
+#ifdef KERNEL
+# include "afs/sysincludes.h"
+#else
+# include <string.h>
+# include <limits.h>
+# ifndef AFS_NT40_ENV
+# include <netinet/in.h>
+# endif
#endif
-static bool_t xdrmem_getint32();
-static bool_t xdrmem_putint32();
-static bool_t xdrmem_getbytes();
-static bool_t xdrmem_putbytes();
-static u_int xdrmem_getpos();
-static bool_t xdrmem_setpos();
-static afs_int32 * xdrmem_inline();
-static void xdrmem_destroy();
-
-static struct xdr_ops xdrmem_ops = {
- xdrmem_getint32,
- xdrmem_putint32,
- xdrmem_getbytes,
- xdrmem_putbytes,
- xdrmem_getpos,
- xdrmem_setpos,
- xdrmem_inline,
- xdrmem_destroy
+#include "xdr.h"
+
+static bool_t xdrmem_getint32(AFS_XDRS_T, afs_int32 *);
+static bool_t xdrmem_putint32(AFS_XDRS_T, afs_int32 *);
+static bool_t xdrmem_getbytes(AFS_XDRS_T, caddr_t, u_int);
+static bool_t xdrmem_putbytes(AFS_XDRS_T, caddr_t, u_int);
+static u_int xdrmem_getpos(AFS_XDRS_T);
+static bool_t xdrmem_setpos(AFS_XDRS_T, u_int);
+static afs_int32 *xdrmem_inline(AFS_XDRS_T, u_int);
+static void xdrmem_destroy(AFS_XDRS_T);
+
+static struct xdr_ops xdrmem_ops = {
+#if defined(AFS_NT40_ENV) || (defined(AFS_SGI_ENV) && !defined(__c99))
+ /* Windows does not support labeled assigments */
+ xdrmem_getint32, /* deserialize an afs_int32 */
+ xdrmem_putint32, /* serialize an afs_int32 */
+ xdrmem_getbytes, /* deserialize counted bytes */
+ xdrmem_putbytes, /* serialize counted bytes */
+ xdrmem_getpos, /* get offset in the stream: not supported. */
+ xdrmem_setpos, /* set offset in the stream: not supported. */
+ xdrmem_inline, /* prime stream for inline macros */
+ xdrmem_destroy /* destroy stream */
+#else
+ .x_getint32 = xdrmem_getint32,
+ .x_putint32 = xdrmem_putint32,
+ .x_getbytes = xdrmem_getbytes,
+ .x_putbytes = xdrmem_putbytes,
+ .x_getpostn = xdrmem_getpos,
+ .x_setpostn = xdrmem_setpos,
+ .x_inline = xdrmem_inline,
+ .x_destroy = xdrmem_destroy
+#endif
};
/*
* memory buffer.
*/
void
-xdrmem_create(xdrs, addr, size, op)
- register XDR *xdrs;
- caddr_t addr;
- u_int size;
- enum xdr_op op;
+xdrmem_create(XDR * xdrs, caddr_t addr, u_int size, enum xdr_op op)
{
-
- xdrs->x_op = op;
- xdrs->x_ops = &xdrmem_ops;
- xdrs->x_private = xdrs->x_base = addr;
- xdrs->x_handy = size;
+ xdrs->x_op = op;
+ xdrs->x_ops = &xdrmem_ops;
+ xdrs->x_private = xdrs->x_base = addr;
+ xdrs->x_handy = (size > INT_MAX) ? INT_MAX : size; /* XXX */
}
static void
-xdrmem_destroy(/*xdrs*/)
- /*XDR *xdrs;*/
+xdrmem_destroy(AFS_XDRS_T axdrs)
{
}
static bool_t
-xdrmem_getint32(xdrs, lp)
- register XDR *xdrs;
- afs_int32 *lp;
+xdrmem_getint32(AFS_XDRS_T axdrs, afs_int32 * lp)
{
-
- if ((xdrs->x_handy -= sizeof(afs_int32)) < 0)
- return (FALSE);
- *lp = ntohl(*((afs_int32 *)(xdrs->x_private)));
- xdrs->x_private += sizeof(afs_int32);
- return (TRUE);
+ XDR * xdrs = (XDR *)axdrs;
+
+ if (xdrs->x_handy < sizeof(afs_int32))
+ return (FALSE);
+ else
+ xdrs->x_handy -= sizeof(afs_int32);
+ *lp = ntohl(*((afs_int32 *) (xdrs->x_private)));
+ xdrs->x_private += sizeof(afs_int32);
+ return (TRUE);
}
static bool_t
-xdrmem_putint32(xdrs, lp)
- register XDR *xdrs;
- afs_int32 *lp;
+xdrmem_putint32(AFS_XDRS_T axdrs, afs_int32 * lp)
{
-
- if ((xdrs->x_handy -= sizeof(afs_int32)) < 0)
- return (FALSE);
- *(afs_int32 *)xdrs->x_private = htonl(*lp);
- xdrs->x_private += sizeof(afs_int32);
- return (TRUE);
+ XDR * xdrs = (XDR *)axdrs;
+
+ if (xdrs->x_handy < sizeof(afs_int32))
+ return (FALSE);
+ else
+ xdrs->x_handy -= sizeof(afs_int32);
+ *(afs_int32 *) xdrs->x_private = htonl(*lp);
+ xdrs->x_private += sizeof(afs_int32);
+ return (TRUE);
}
static bool_t
-xdrmem_getbytes(xdrs, addr, len)
- register XDR *xdrs;
- caddr_t addr;
- register u_int len;
+xdrmem_getbytes(AFS_XDRS_T axdrs, caddr_t addr, u_int len)
{
-
- if ((xdrs->x_handy -= len) < 0)
- return (FALSE);
- bcopy(xdrs->x_private, addr, len);
- xdrs->x_private += len;
- return (TRUE);
+ XDR * xdrs = (XDR *)axdrs;
+
+ if (xdrs->x_handy < len)
+ return (FALSE);
+ else
+ xdrs->x_handy -= len;
+ memcpy(addr, xdrs->x_private, len);
+ xdrs->x_private += len;
+ return (TRUE);
}
static bool_t
-xdrmem_putbytes(xdrs, addr, len)
- register XDR *xdrs;
- caddr_t addr;
- register u_int len;
+xdrmem_putbytes(AFS_XDRS_T axdrs, caddr_t addr, u_int len)
{
-
- if ((xdrs->x_handy -= len) < 0)
- return (FALSE);
- bcopy(addr, xdrs->x_private, len);
- xdrs->x_private += len;
- return (TRUE);
+ XDR * xdrs = (XDR *)axdrs;
+
+ if (xdrs->x_handy < len)
+ return (FALSE);
+ else
+ xdrs->x_handy -= len;
+ memcpy(xdrs->x_private, addr, len);
+ xdrs->x_private += len;
+ return (TRUE);
}
static u_int
-xdrmem_getpos(xdrs)
- register XDR *xdrs;
+xdrmem_getpos(AFS_XDRS_T axdrs)
{
+ XDR * xdrs = (XDR *)axdrs;
- return ((u_int)xdrs->x_private - (u_int)xdrs->x_base);
+ return ((u_int)(xdrs->x_private - xdrs->x_base));
}
static bool_t
-xdrmem_setpos(xdrs, pos)
- register XDR *xdrs;
- u_int pos;
+xdrmem_setpos(AFS_XDRS_T axdrs, u_int pos)
{
- register caddr_t newaddr = xdrs->x_base + pos;
- register caddr_t lastaddr = xdrs->x_private + xdrs->x_handy;
-
- if ((afs_int32)newaddr > (afs_int32)lastaddr)
- return (FALSE);
- xdrs->x_private = newaddr;
- xdrs->x_handy = (int)lastaddr - (int)newaddr;
- return (TRUE);
+ XDR * xdrs = (XDR *)axdrs;
+
+ caddr_t newaddr = xdrs->x_base + pos;
+ caddr_t lastaddr = xdrs->x_private + xdrs->x_handy;
+
+ if (newaddr > lastaddr)
+ return (FALSE);
+ xdrs->x_private = newaddr;
+ xdrs->x_handy = (int)(lastaddr - newaddr);
+ return (TRUE);
}
static afs_int32 *
-xdrmem_inline(xdrs, len)
- register XDR *xdrs;
- int len;
+xdrmem_inline(AFS_XDRS_T axdrs, u_int len)
{
- afs_int32 *buf = 0;
-
- if (xdrs->x_handy >= len) {
- xdrs->x_handy -= len;
- buf = (afs_int32 *) xdrs->x_private;
- xdrs->x_private += len;
- }
- return (buf);
+ XDR * xdrs = (XDR *)axdrs;
+
+ afs_int32 *buf = 0;
+
+ if (len >= 0 && xdrs->x_handy >= len) {
+ xdrs->x_handy -= len;
+ buf = (afs_int32 *) xdrs->x_private;
+ xdrs->x_private += len;
+ }
+ return (buf);
}
-#endif /* NeXT */