From: Sam Hartman Date: Wed, 7 Mar 2001 09:51:17 +0000 (+0000) Subject: Initial revision X-Git-Tag: debian/1.0.3-1~9 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=390df2efc1f4f578b41fbe15a852728281ebfdb9;p=packages%2Fo%2Fopenafs.git Initial revision --- diff --git a/src/rx/xdr_int64.c b/src/rx/xdr_int64.c new file mode 100644 index 000000000..62c40c906 --- /dev/null +++ b/src/rx/xdr_int64.c @@ -0,0 +1,131 @@ + +/* + * XDR routine for int64 (long long or struct) + */ + +#if defined(KERNEL) && !defined(UKERNEL) +#include "afs/param.h" +#ifdef AFS_LINUX20_ENV +#include "../h/string.h" +#define bzero(A,C) memset((A), 0, (C)) +#else +#include +#include +#endif +#else +#include +#endif +#include "xdr.h" +#if defined(KERNEL) && !defined(UKERNEL) +#ifdef AFS_DEC_ENV +#include +#endif +#endif + +#ifndef lint +static char sccsid[] = "@(#)xdr_array.c 1.1 86/02/03 Copyr 1984 Sun Micro"; +#endif + +#ifdef AFS_64BIT_ENV +/* + * XDR afs_int64 integers + */ +bool_t +xdr_int64(xdrs, ulp) + register XDR *xdrs; + afs_int64 *ulp; +{ + static afs_int32 high; + static afs_uint32 low; + + if (xdrs->x_op == XDR_DECODE) { + if (!XDR_GETINT32(xdrs, (afs_int32 *) &high)) return (FALSE); + if (!XDR_GETINT32(xdrs, (afs_int32 *) &low)) return (FALSE); + *ulp = high; + *ulp <<= 32; + *ulp += low; + return (TRUE); + } + if (xdrs->x_op == XDR_ENCODE) { + high = (*ulp >> 32); + low = *ulp & 0xFFFFFFFFL; + if (!XDR_PUTINT32(xdrs, (afs_int32 *) &high)) return (FALSE); + return (XDR_PUTINT32(xdrs, (afs_int32 *) &low)); + } + if (xdrs->x_op == XDR_FREE) + return (TRUE); + return (FALSE); +} + +/* + * XDR afs_int64 integers + */ +bool_t +xdr_uint64(xdrs, ulp) + register XDR *xdrs; + afs_uint64 *ulp; +{ + static afs_uint32 high; + static afs_uint32 low; + + if (xdrs->x_op == XDR_DECODE) { + if (!XDR_GETINT32(xdrs, (afs_uint32 *) &high)) return (FALSE); + if (!XDR_GETINT32(xdrs, (afs_uint32 *) &low)) return (FALSE); + *ulp = high; + *ulp <<= 32; + *ulp += low; + return (TRUE); + } + if (xdrs->x_op == XDR_ENCODE) { + high = (*ulp >> 32); + low = *ulp & 0xFFFFFFFFL; + if (!XDR_PUTINT32(xdrs, (afs_uint32 *) &high)) return (FALSE); + return (XDR_PUTINT32(xdrs, (afs_uint32 *) &low)); + } + if (xdrs->x_op == XDR_FREE) + return (TRUE); + return (FALSE); +} +#else /* AFS_64BIT_ENV */ +/* + * XDR afs_int64 integers + */ +bool_t +xdr_int64(xdrs, ulp) + register XDR *xdrs; + afs_int64 *ulp; +{ + if (xdrs->x_op == XDR_DECODE) { + if (!XDR_GETINT32(xdrs, (afs_int32 *) &ulp->high)) return (FALSE); + return (XDR_GETINT32(xdrs, (afs_int32 *) &ulp->low)); + } + if (xdrs->x_op == XDR_ENCODE) { + if (!XDR_PUTINT32(xdrs, (afs_int32 *) &ulp->high)) return (FALSE); + return (XDR_PUTINT32(xdrs, (afs_int32 *) &ulp->low)); + } + if (xdrs->x_op == XDR_FREE) + return (TRUE); + return (FALSE); +} + +/* + * XDR afs_uint64 integers + */ +bool_t +xdr_uint64(xdrs, ulp) + register XDR *xdrs; + afs_uint64 *ulp; +{ + if (xdrs->x_op == XDR_DECODE) { + if (!XDR_GETINT32(xdrs, (afs_uint32 *) &ulp->high)) return (FALSE); + return (XDR_GETINT32(xdrs, (afs_uint32 *) &ulp->low)); + } + if (xdrs->x_op == XDR_ENCODE) { + if (!XDR_PUTINT32(xdrs, (afs_uint32 *) &ulp->high)) return (FALSE); + return (XDR_PUTINT32(xdrs, (afs_uint32 *) &ulp->low)); + } + if (xdrs->x_op == XDR_FREE) + return (TRUE); + return (FALSE); +} +#endif /* AFS_64BIT_ENV */