rx: Don't adjust non-existent events
[openafs.git] / src / rx / xdr_int64.c
1
2 /*
3  *  XDR routine for int64 (long long or struct)
4  */
5
6 #include <afsconfig.h>
7 #include <afs/param.h>
8
9
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"
21
22 /*
23  * XDR afs_int64 integers
24  */
25 bool_t
26 xdr_int64(XDR * xdrs, afs_int64 * ulp)
27 {
28     return xdr_afs_int64(xdrs, ulp);
29 }
30
31 bool_t
32 xdr_afs_int64(XDR * xdrs, afs_int64 * ulp)
33 {
34     afs_int32 high;
35     afs_uint32 low;
36
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);
46     }
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));
53     }
54     if (xdrs->x_op == XDR_FREE)
55         return (TRUE);
56     return (FALSE);
57 }
58
59 /*
60  * XDR afs_int64 integers
61  */
62 bool_t
63 xdr_uint64(XDR * xdrs, afs_uint64 * ulp)
64 {
65     return xdr_afs_uint64(xdrs, ulp);
66 }
67
68 bool_t
69 xdr_afs_uint64(XDR * xdrs, afs_uint64 * ulp)
70 {
71     afs_uint32 high;
72     afs_uint32 low;
73
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);
83     }
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));
90     }
91     if (xdrs->x_op == XDR_FREE)
92         return (TRUE);
93     return (FALSE);
94 }
95