linux-warning-reduction-20090318
[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 RCSID
10     ("$Header$");
11
12 #if defined(KERNEL) && !defined(UKERNEL)
13 #ifdef AFS_LINUX20_ENV
14 #include "h/string.h"
15 #else
16 #include <sys/param.h>
17 #include <sys/systm.h>
18 #endif
19 #else
20 #include <stdio.h>
21 #endif
22 #include "xdr.h"
23
24 #ifdef AFS_64BIT_ENV
25 /*
26  * XDR afs_int64 integers
27  */
28 bool_t
29 xdr_int64(XDR * xdrs, afs_int64 * ulp)
30 {
31     return xdr_afs_int64(xdrs, ulp);
32 }
33
34 bool_t
35 xdr_afs_int64(XDR * xdrs, afs_int64 * ulp)
36 {
37     afs_int32 high;
38     afs_uint32 low;
39
40     if (xdrs->x_op == XDR_DECODE) {
41         if (!XDR_GETINT32(xdrs, (afs_int32 *) & high))
42             return (FALSE);
43         if (!XDR_GETINT32(xdrs, (afs_int32 *) & low))
44             return (FALSE);
45         *ulp = high;
46         *ulp <<= 32;
47         *ulp += low;
48         return (TRUE);
49     }
50     if (xdrs->x_op == XDR_ENCODE) {
51         high = (afs_int32) (*ulp >> 32);
52         low = (afs_uint32) (*ulp & 0xFFFFFFFFL);
53         if (!XDR_PUTINT32(xdrs, (afs_int32 *) & high))
54             return (FALSE);
55         return (XDR_PUTINT32(xdrs, (afs_int32 *) & low));
56     }
57     if (xdrs->x_op == XDR_FREE)
58         return (TRUE);
59     return (FALSE);
60 }
61
62 /*
63  * XDR afs_int64 integers
64  */
65 bool_t
66 xdr_uint64(XDR * xdrs, afs_uint64 * ulp)
67 {
68     return xdr_afs_uint64(xdrs, ulp);
69 }
70
71 bool_t
72 xdr_afs_uint64(XDR * xdrs, afs_uint64 * ulp)
73 {
74     afs_uint32 high;
75     afs_uint32 low;
76
77     if (xdrs->x_op == XDR_DECODE) {
78         if (!XDR_GETINT32(xdrs, (afs_uint32 *) & high))
79             return (FALSE);
80         if (!XDR_GETINT32(xdrs, (afs_uint32 *) & low))
81             return (FALSE);
82         *ulp = high;
83         *ulp <<= 32;
84         *ulp += low;
85         return (TRUE);
86     }
87     if (xdrs->x_op == XDR_ENCODE) {
88         high = (afs_uint32) (*ulp >> 32);
89         low = (afs_uint32) (*ulp & 0xFFFFFFFFL);
90         if (!XDR_PUTINT32(xdrs, (afs_uint32 *) & high))
91             return (FALSE);
92         return (XDR_PUTINT32(xdrs, (afs_uint32 *) & low));
93     }
94     if (xdrs->x_op == XDR_FREE)
95         return (TRUE);
96     return (FALSE);
97 }
98
99 #else /* AFS_64BIT_ENV */
100 /*
101  * XDR afs_int64 integers
102  */
103 bool_t
104 xdr_int64(XDR * xdrs, afs_int64 * ulp)
105 {
106     return xdr_afs_int64(xdrs, ulp);
107 }
108
109 bool_t
110 xdr_afs_int64(XDR * xdrs, afs_int64 * ulp)
111 {
112     if (xdrs->x_op == XDR_DECODE) {
113         if (!XDR_GETINT32(xdrs, (afs_int32 *) & ulp->high))
114             return (FALSE);
115         return (XDR_GETINT32(xdrs, (afs_int32 *) & ulp->low));
116     }
117     if (xdrs->x_op == XDR_ENCODE) {
118         if (!XDR_PUTINT32(xdrs, (afs_int32 *) & ulp->high))
119             return (FALSE);
120         return (XDR_PUTINT32(xdrs, (afs_int32 *) & ulp->low));
121     }
122     if (xdrs->x_op == XDR_FREE)
123         return (TRUE);
124     return (FALSE);
125 }
126
127 /*
128  * XDR afs_uint64 integers
129  */
130 bool_t
131 xdr_uint64(XDR * xdrs, afs_uint64 * ulp)
132 {
133     return xdr_afs_uint64(xdrs, ulp);
134 }
135
136 bool_t
137 xdr_afs_uint64(XDR * xdrs, afs_uint64 * ulp)
138 {
139     if (xdrs->x_op == XDR_DECODE) {
140         if (!XDR_GETINT32(xdrs, (afs_uint32 *) & ulp->high))
141             return (FALSE);
142         return (XDR_GETINT32(xdrs, (afs_uint32 *) & ulp->low));
143     }
144     if (xdrs->x_op == XDR_ENCODE) {
145         if (!XDR_PUTINT32(xdrs, (afs_uint32 *) & ulp->high))
146             return (FALSE);
147         return (XDR_PUTINT32(xdrs, (afs_uint32 *) & ulp->low));
148     }
149     if (xdrs->x_op == XDR_FREE)
150         return (TRUE);
151     return (FALSE);
152 }
153 #endif /* AFS_64BIT_ENV */