Update.
[glibc.git] / sunrpc / xdr_intXX_t.c
blobd36d1623bc2f82449f0cfe10b9d2e608044c1263
1 /* Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3 Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1998.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, write to the Free
17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18 02111-1307 USA. */
20 #include <rpc/types.h>
21 #include <rpc/xdr.h>
23 /* XDR 64bit integers */
24 bool_t
25 xdr_int64_t (XDR *xdrs, int64_t *ip)
27 int32_t t1;
28 /* This must be unsigned, otherwise we get problems with sign
29 extension in the DECODE case. */
30 uint32_t t2;
32 switch (xdrs->x_op)
34 case XDR_ENCODE:
35 t1 = (int32_t) ((*ip) >> 32);
36 t2 = (int32_t) (*ip);
37 return (XDR_PUTINT32(xdrs, &t1) && XDR_PUTINT32(xdrs, &t2));
38 case XDR_DECODE:
39 if (!XDR_GETINT32(xdrs, &t1) || !XDR_GETINT32(xdrs, &t2))
40 return FALSE;
41 *ip = ((int64_t) t1) << 32;
42 *ip |= t2;
43 return TRUE;
44 case XDR_FREE:
45 return TRUE;
46 default:
47 return FALSE;
51 /* XDR 64bit unsigned integers */
52 bool_t
53 xdr_uint64_t (XDR *xdrs, uint64_t *uip)
55 uint32_t t1;
56 uint32_t t2;
58 switch (xdrs->x_op)
60 case XDR_ENCODE:
61 t1 = (uint32_t) ((*uip) >> 32);
62 t2 = (uint32_t) (*uip);
63 return (XDR_PUTINT32 (xdrs, (int32_t *) &t1) &&
64 XDR_PUTINT32(xdrs, (int32_t *) &t2));
65 case XDR_DECODE:
66 if (!XDR_GETINT32(xdrs, (int32_t *) &t1) ||
67 !XDR_GETINT32(xdrs, (int32_t *) &t2))
68 return FALSE;
69 *uip = ((uint64_t) t1) << 32;
70 *uip |= t2;
71 return TRUE;
72 case XDR_FREE:
73 return TRUE;
74 default:
75 return FALSE;
79 /* XDR 32bit integers */
80 bool_t
81 xdr_int32_t (XDR *xdrs, int32_t *lp)
83 switch (xdrs->x_op)
85 case XDR_ENCODE:
86 return XDR_PUTINT32 (xdrs, lp);
87 case XDR_DECODE:
88 return XDR_GETINT32 (xdrs, lp);
89 case XDR_FREE:
90 return TRUE;
91 default:
92 return FALSE;
96 /* XDR 32bit unsigned integers */
97 bool_t
98 xdr_uint32_t (XDR *xdrs, uint32_t *ulp)
100 switch (xdrs->x_op)
102 case XDR_ENCODE:
103 return XDR_PUTINT32 (xdrs, (int32_t *) ulp);
104 case XDR_DECODE:
105 return XDR_GETINT32 (xdrs, (int32_t *) ulp);
106 case XDR_FREE:
107 return TRUE;
108 default:
109 return FALSE;
113 /* XDR 16bit integers */
114 bool_t
115 xdr_int16_t (XDR *xdrs, int16_t *ip)
117 int32_t t;
119 switch (xdrs->x_op)
121 case XDR_ENCODE:
122 t = (int32_t) *ip;
123 return XDR_PUTINT32 (xdrs, &t);
124 case XDR_DECODE:
125 if (!XDR_GETINT32 (xdrs, &t))
126 return FALSE;
127 *ip = (int16_t) t;
128 return TRUE;
129 case XDR_FREE:
130 return TRUE;
131 default:
132 return FALSE;
136 /* XDR 16bit unsigned integers */
137 bool_t
138 xdr_uint16_t (XDR *xdrs, uint16_t *uip)
140 uint32_t ut;
142 switch (xdrs->x_op)
144 case XDR_ENCODE:
145 ut = (uint32_t) *uip;
146 return XDR_PUTINT32 (xdrs, (int32_t *) &ut);
147 case XDR_DECODE:
148 if (!XDR_GETINT32 (xdrs, (int32_t *) &ut))
149 return FALSE;
150 *uip = (uint16_t) ut;
151 return TRUE;
152 case XDR_FREE:
153 return TRUE;
154 default:
155 return FALSE;
159 /* XDR 8bit integers */
160 bool_t
161 xdr_int8_t (XDR *xdrs, int8_t *ip)
163 int32_t t;
165 switch (xdrs->x_op)
167 case XDR_ENCODE:
168 t = (int32_t) *ip;
169 return XDR_PUTINT32 (xdrs, &t);
170 case XDR_DECODE:
171 if (!XDR_GETINT32 (xdrs, &t))
172 return FALSE;
173 *ip = (int8_t) t;
174 return TRUE;
175 case XDR_FREE:
176 return TRUE;
177 default:
178 return FALSE;
182 /* XDR 8bit unsigned integers */
183 bool_t
184 xdr_uint8_t (XDR *xdrs, uint8_t *uip)
186 uint32_t ut;
188 switch (xdrs->x_op)
190 case XDR_ENCODE:
191 ut = (uint32_t) *uip;
192 return XDR_PUTINT32 (xdrs, (int32_t *) &ut);
193 case XDR_DECODE:
194 if (!XDR_GETINT32 (xdrs, (int32_t *) &ut))
195 return FALSE;
196 *uip = (uint8_t) ut;
197 return TRUE;
198 case XDR_FREE:
199 return TRUE;
200 default:
201 return FALSE;