|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef NETTLE_BUFFER_H_INCLUDED |
|
|
#define NETTLE_BUFFER_H_INCLUDED |
|
|
|
|
|
#include "realloc.h" |
|
|
|
|
|
#ifdef __cplusplus |
|
|
extern "C" { |
|
|
#endif |
|
|
|
|
|
struct nettle_buffer |
|
|
{ |
|
|
uint8_t *contents; |
|
|
|
|
|
size_t alloc; |
|
|
|
|
|
void *realloc_ctx; |
|
|
nettle_realloc_func *realloc; |
|
|
|
|
|
|
|
|
size_t size; |
|
|
}; |
|
|
|
|
|
|
|
|
void |
|
|
nettle_buffer_init(struct nettle_buffer *buffer); |
|
|
|
|
|
void |
|
|
nettle_buffer_init_realloc(struct nettle_buffer *buffer, |
|
|
void *realloc_ctx, |
|
|
nettle_realloc_func *realloc); |
|
|
|
|
|
|
|
|
void |
|
|
nettle_buffer_init_size(struct nettle_buffer *buffer, |
|
|
size_t length, uint8_t *space); |
|
|
|
|
|
void |
|
|
nettle_buffer_clear(struct nettle_buffer *buffer); |
|
|
|
|
|
|
|
|
void |
|
|
nettle_buffer_reset(struct nettle_buffer *buffer); |
|
|
|
|
|
int |
|
|
nettle_buffer_grow(struct nettle_buffer *buffer, |
|
|
size_t length); |
|
|
|
|
|
#define NETTLE_BUFFER_PUTC(buffer, c) \ |
|
|
( (((buffer)->size < (buffer)->alloc) || nettle_buffer_grow((buffer), 1)) \ |
|
|
&& ((buffer)->contents[(buffer)->size++] = (c), 1) ) |
|
|
|
|
|
int |
|
|
nettle_buffer_write(struct nettle_buffer *buffer, |
|
|
size_t length, const uint8_t *data); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t * |
|
|
nettle_buffer_space(struct nettle_buffer *buffer, |
|
|
size_t length); |
|
|
|
|
|
|
|
|
int |
|
|
nettle_buffer_copy(struct nettle_buffer *dst, |
|
|
const struct nettle_buffer *src); |
|
|
|
|
|
#ifdef __cplusplus |
|
|
} |
|
|
#endif |
|
|
|
|
|
#endif |
|
|
|