OpenBSD manual page server

Manual Page Search Parameters

BUF_MEM_NEW(3) Library Functions Manual BUF_MEM_NEW(3)

BUF_MEM_new, BUF_MEM_free, BUF_MEM_grow, BUF_MEM_grow_clean, BUF_reverse, BUF_strdupsimple character arrays structure

#include <openssl/buffer.h>

BUF_MEM *
BUF_MEM_new(void);

void
BUF_MEM_free(BUF_MEM *a);

int
BUF_MEM_grow(BUF_MEM *str, size_t len);

int
BUF_MEM_grow_clean(BUF_MEM *str, size_t len);

void
BUF_reverse(unsigned char *out, const unsigned char *in, size_t len);

char *
BUF_strdup(const char *str);

The buffer library handles simple character arrays. Buffers are used for various purposes in the library, most notably memory BIOs.

The library uses the BUF_MEM structure defined in buffer.h:

typedef struct buf_mem_st
{
	size_t length;	/* current number of bytes */
	char *data;
	size_t max;	/* size of buffer */
} BUF_MEM;

length is the current size of the buffer in bytes; max is the amount of memory allocated to the buffer. There are three functions which handle these and one miscellaneous function.

() allocates a new buffer of zero size.

() frees up an already existing buffer. The data is zeroed before freeing up in case the buffer contains sensitive data. If a is a NULL pointer, no action occurs.

() changes the size of an already existing buffer to len. Any data already in the buffer is preserved if it increases in size.

() is similar to BUF_MEM_grow(), but it sets any freed or additionally allocated memory to zero.

() reverses len bytes at in into out. If in is NULL, out is reversed in place.

() copies a NUL terminated string into a block of allocated memory and returns a pointer to the allocated block. Unlike the system strdup(3) function, BUF_strdup() will accept a NULL argument and will return NULL in that case. Its use in new programs is discouraged.

The memory allocated from () should be freed up using the free(3) function.

BUF_MEM_new() returns the buffer or NULL on error.

BUF_MEM_grow() and BUF_MEM_grow_clean() return zero on error or the new size (i.e. len).

BIO_new(3), BIO_s_mem(3)

BUF_MEM_new(), BUF_MEM_free(), and BUF_MEM_grow() first appeared in SSLeay 0.6.0. BUF_strdup() first appeared in SSLeay 0.8.0. All these functions have been available since OpenBSD 2.4.

BUF_MEM_grow_clean() first appeared in OpenSSL 0.9.7 and has been available since OpenBSD 3.2.

BUF_reverse() first appeared in OpenSSL 1.0.0 and has been available since OpenBSD 4.9.

June 6, 2019 OpenBSD-6.7