Deleted Added
sdiff udiff text old ( 72445 ) new ( 78527 )
full compact
1/*
2 * Copyright (c) 1997-2001 Kungliga Tekniska H�gskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright

--- 17 unchanged lines hidden (view full) ---

28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34#include "krb5_locl.h"
35
36RCSID("$Id: store.c,v 1.35 2001/05/11 13:01:43 joda Exp $");
37
38#define BYTEORDER_IS(SP, V) (((SP)->flags & KRB5_STORAGE_BYTEORDER_MASK) == (V))
39#define BYTEORDER_IS_LE(SP) BYTEORDER_IS((SP), KRB5_STORAGE_BYTEORDER_LE)
40#define BYTEORDER_IS_BE(SP) BYTEORDER_IS((SP), KRB5_STORAGE_BYTEORDER_BE)
41#define BYTEORDER_IS_HOST(SP) (BYTEORDER_IS((SP), KRB5_STORAGE_BYTEORDER_HOST) || \
42 krb5_storage_is_flags((SP), KRB5_STORAGE_HOST_BYTEORDER))
43
44void
45krb5_storage_set_flags(krb5_storage *sp, krb5_flags flags)
46{
47 sp->flags |= flags;
48}
49
50void
51krb5_storage_clear_flags(krb5_storage *sp, krb5_flags flags)
52{
53 sp->flags &= ~flags;
54}
55
56krb5_boolean
57krb5_storage_is_flags(krb5_storage *sp, krb5_flags flags)
58{
59 return (sp->flags & flags) == flags;
60}
61
62void
63krb5_storage_set_byteorder(krb5_storage *sp, krb5_flags byteorder)
64{
65 sp->flags &= ~KRB5_STORAGE_BYTEORDER_MASK;
66 sp->flags |= byteorder;
67}
68
69krb5_flags
70krb5_storage_get_byteorder(krb5_storage *sp, krb5_flags byteorder)
71{
72 return sp->flags & KRB5_STORAGE_BYTEORDER_MASK;
73}
74
75
76ssize_t
77_krb5_put_int(void *buffer, unsigned long value, size_t size)
78{
79 unsigned char *p = buffer;
80 int i;
81 for (i = size - 1; i >= 0; i--) {
82 p[i] = value & 0xff;
83 value >>= 8;

--- 46 unchanged lines hidden (view full) ---

130}
131
132static krb5_error_code
133krb5_store_int(krb5_storage *sp,
134 int32_t value,
135 size_t len)
136{
137 int ret;
138 unsigned char v[16];
139
140 if(len > sizeof(v))
141 return EINVAL;
142 _krb5_put_int(v, value, len);
143 ret = sp->store(sp, v, len);
144 if (ret != len)
145 return (ret<0)?errno:KRB5_CC_END;
146 return 0;
147}
148
149krb5_error_code
150krb5_store_int32(krb5_storage *sp,
151 int32_t value)
152{
153 if(BYTEORDER_IS_HOST(sp))
154 value = htonl(value);
155 else if(BYTEORDER_IS_LE(sp))
156 value = bswap32(value);
157 return krb5_store_int(sp, value, 4);
158}
159
160static krb5_error_code
161krb5_ret_int(krb5_storage *sp,
162 int32_t *value,
163 size_t len)
164{

--- 10 unchanged lines hidden (view full) ---

175
176krb5_error_code
177krb5_ret_int32(krb5_storage *sp,
178 int32_t *value)
179{
180 krb5_error_code ret = krb5_ret_int(sp, value, 4);
181 if(ret)
182 return ret;
183 if(BYTEORDER_IS_HOST(sp))
184 *value = htonl(*value);
185 else if(BYTEORDER_IS_LE(sp))
186 *value = bswap32(*value);
187 return 0;
188}
189
190krb5_error_code
191krb5_store_int16(krb5_storage *sp,
192 int16_t value)
193{
194 if(BYTEORDER_IS_HOST(sp))
195 value = htons(value);
196 else if(BYTEORDER_IS_LE(sp))
197 value = bswap16(value);
198 return krb5_store_int(sp, value, 2);
199}
200
201krb5_error_code
202krb5_ret_int16(krb5_storage *sp,
203 int16_t *value)
204{
205 int32_t v;
206 int ret;
207 ret = krb5_ret_int(sp, &v, 2);
208 if(ret)
209 return ret;
210 *value = v;
211 if(BYTEORDER_IS_HOST(sp))
212 *value = htons(*value);
213 else if(BYTEORDER_IS_LE(sp))
214 *value = bswap16(*value);
215 return 0;
216}
217
218krb5_error_code
219krb5_store_int8(krb5_storage *sp,
220 int8_t value)
221{
222 int ret;

--- 442 unchanged lines hidden ---