3 * A bare-bones string stream.
6 /* nettle, low-level cryptographics library
8 * Copyright (C) 2002 Niels Möller
10 * The nettle library is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU Lesser General Public License as published by
12 * the Free Software Foundation; either version 2.1 of the License, or (at your
13 * option) any later version.
15 * The nettle library is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
18 * License for more details.
20 * You should have received a copy of the GNU Lesser General Public License
21 * along with the nettle library; see the file COPYING.LIB. If not, write to
22 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
37 nettle_buffer_grow(struct nettle_buffer
*buffer
,
40 assert(buffer
->size
<= buffer
->alloc
);
42 if (buffer
->size
+ length
> buffer
->alloc
)
50 alloc
= buffer
->alloc
* 2 + length
+ 100;
51 p
= buffer
->realloc(buffer
->realloc_ctx
, buffer
->contents
, alloc
);
56 buffer
->alloc
= alloc
;
62 nettle_buffer_init_realloc(struct nettle_buffer
*buffer
,
64 nettle_realloc_func
*realloc
)
66 buffer
->contents
= NULL
;
68 buffer
->realloc
= realloc
;
69 buffer
->realloc_ctx
= realloc_ctx
;
74 nettle_buffer_init_size(struct nettle_buffer
*buffer
,
75 unsigned length
, uint8_t *space
)
77 buffer
->contents
= space
;
78 buffer
->alloc
= length
;
79 buffer
->realloc
= NULL
;
80 buffer
->realloc_ctx
= NULL
;
85 nettle_buffer_clear(struct nettle_buffer
*buffer
)
88 buffer
->realloc(buffer
->realloc_ctx
, buffer
->contents
, 0);
90 buffer
->contents
= NULL
;
96 nettle_buffer_reset(struct nettle_buffer
*buffer
)
102 nettle_buffer_space(struct nettle_buffer
*buffer
,
107 if (!nettle_buffer_grow(buffer
, length
))
110 p
= buffer
->contents
+ buffer
->size
;
111 buffer
->size
+= length
;
116 nettle_buffer_write(struct nettle_buffer
*buffer
,
117 unsigned length
, const uint8_t *data
)
119 uint8_t *p
= nettle_buffer_space(buffer
, length
);
122 memcpy(p
, data
, length
);
130 nettle_buffer_copy(struct nettle_buffer
*dst
,
131 const struct nettle_buffer
*src
)
133 return nettle_buffer_write(dst
, src
->size
, src
->contents
);