All headers

Memory and string functions, see also mem.h.

  1. buf_mem_st
  2. BUF_MEM_new
  3. BUF_MEM_free
  4. BUF_MEM_reserve
  5. BUF_MEM_grow
  6. BUF_MEM_grow_clean
  7. BUF_MEM_append
  8. BUF_strdup
  9. BUF_strnlen
  10. BUF_strndup
  11. BUF_memdup
  12. BUF_strlcpy
  13. BUF_strlcat

buf_mem_st (aka BUF_MEM) is a generic buffer object used by OpenSSL.

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

BUF_MEM_new creates a new BUF_MEM which has no allocated data buffer.


BUF_MEM_free frees buf->data if needed and then frees buf itself.


BUF_MEM_reserve ensures buf has capacity cap and allocates memory if needed. It returns one on success and zero on error.

OPENSSL_EXPORT int BUF_MEM_reserve(BUF_MEM *buf, size_t cap);

BUF_MEM_grow ensures that buf has length len and allocates memory if needed. If the length of buf increased, the new bytes are filled with zeros. It returns the length of buf, or zero if there's an error.

OPENSSL_EXPORT size_t BUF_MEM_grow(BUF_MEM *buf, size_t len);

BUF_MEM_grow_clean calls BUF_MEM_grow. BoringSSL always zeros memory allocated memory on free.

OPENSSL_EXPORT size_t BUF_MEM_grow_clean(BUF_MEM *buf, size_t len);

BUF_MEM_append appends in to buf. It returns one on success and zero on error.

OPENSSL_EXPORT int BUF_MEM_append(BUF_MEM *buf, const void *in, size_t len);

BUF_strdup returns an allocated, duplicate of str.

OPENSSL_EXPORT char *BUF_strdup(const char *str);

BUF_strnlen returns the number of characters in str, excluding the NUL byte, but at most max_len. This function never reads more than max_len bytes from str.

OPENSSL_EXPORT size_t BUF_strnlen(const char *str, size_t max_len);

BUF_strndup returns an allocated, duplicate of str, which is, at most, size bytes. The result is always NUL terminated.

OPENSSL_EXPORT char *BUF_strndup(const char *str, size_t size);

BUF_memdup returns an allocated, duplicate of size bytes from data.

OPENSSL_EXPORT void *BUF_memdup(const void *data, size_t size);

BUF_strlcpy acts like strlcpy(3).

OPENSSL_EXPORT size_t BUF_strlcpy(char *dst, const char *src, size_t dst_size);

BUF_strlcat acts like strlcat(3).

OPENSSL_EXPORT size_t BUF_strlcat(char *dst, const char *src, size_t dst_size);