Some doc path fixes from Anders
[pkg-k5-afs_openafs.git] / src / rx / xdr_int64.c
blobc1925ed703d7e53e3e5f7f3e19d11d2adc6e8e8c
2 /*
3 * XDR routine for int64 (long long or struct)
4 */
6 #include <afsconfig.h>
7 #include <afs/param.h>
10 #if defined(KERNEL) && !defined(UKERNEL)
11 #ifdef AFS_LINUX20_ENV
12 #include "h/string.h"
13 #else
14 #include <sys/param.h>
15 #include <sys/systm.h>
16 #endif
17 #else
18 #include <roken.h>
19 #endif
20 #include "xdr.h"
23 * XDR afs_int64 integers
25 bool_t
26 xdr_int64(XDR * xdrs, afs_int64 * ulp)
28 return xdr_afs_int64(xdrs, ulp);
31 bool_t
32 xdr_afs_int64(XDR * xdrs, afs_int64 * ulp)
34 afs_int32 high;
35 afs_uint32 low;
37 if (xdrs->x_op == XDR_DECODE) {
38 if (!XDR_GETINT32(xdrs, (afs_int32 *) & high))
39 return (FALSE);
40 if (!XDR_GETINT32(xdrs, (afs_int32 *) & low))
41 return (FALSE);
42 *ulp = high;
43 *ulp <<= 32;
44 *ulp += low;
45 return (TRUE);
47 if (xdrs->x_op == XDR_ENCODE) {
48 high = (afs_int32) (*ulp >> 32);
49 low = (afs_uint32) (*ulp & 0xFFFFFFFFL);
50 if (!XDR_PUTINT32(xdrs, (afs_int32 *) & high))
51 return (FALSE);
52 return (XDR_PUTINT32(xdrs, (afs_int32 *) & low));
54 if (xdrs->x_op == XDR_FREE)
55 return (TRUE);
56 return (FALSE);
60 * XDR afs_int64 integers
62 bool_t
63 xdr_uint64(XDR * xdrs, afs_uint64 * ulp)
65 return xdr_afs_uint64(xdrs, ulp);
68 bool_t
69 xdr_afs_uint64(XDR * xdrs, afs_uint64 * ulp)
71 afs_uint32 high;
72 afs_uint32 low;
74 if (xdrs->x_op == XDR_DECODE) {
75 if (!XDR_GETINT32(xdrs, (afs_int32 *) & high))
76 return (FALSE);
77 if (!XDR_GETINT32(xdrs, (afs_int32 *) & low))
78 return (FALSE);
79 *ulp = high;
80 *ulp <<= 32;
81 *ulp += low;
82 return (TRUE);
84 if (xdrs->x_op == XDR_ENCODE) {
85 high = (afs_uint32) (*ulp >> 32);
86 low = (afs_uint32) (*ulp & 0xFFFFFFFFL);
87 if (!XDR_PUTINT32(xdrs, (afs_int32 *) & high))
88 return (FALSE);
89 return (XDR_PUTINT32(xdrs, (afs_int32 *) & low));
91 if (xdrs->x_op == XDR_FREE)
92 return (TRUE);
93 return (FALSE);