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