=pod

=head1 NAME

BUF_MEM_new, BUF_MEM_new_ex, BUF_MEM_free, BUF_MEM_grow - simple
character array structure

standard C library equivalents

=head1 SYNOPSIS

 #include <openssl/buffer.h>

 BUF_MEM *BUF_MEM_new(void);

 #define BUF_MEM_FLAG_SECURE

 BUF_MEM *BUF_MEM_new_ex(unsigned long flags);

 void   BUF_MEM_free(BUF_MEM *a);

 int    BUF_MEM_grow(BUF_MEM *str, int len);

=head1 DESCRIPTION

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

BUF_MEM_new() allocates a new buffer of zero size.

BUF_MEM_new_ex() allocates a buffer with the specified flags.
The flag B<BUF_MEM_FLAG_SECURE> specifies that the B<data> pointer
should be allocated on the secure heap; see L<CRYPTO_secure_malloc(3)>.

BUF_MEM_free() frees up an already existing buffer. The data is zeroed
before freeing up in case the buffer contains sensitive data.

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

=head1 RETURN VALUES

BUF_MEM_new() returns the buffer or NULL on error.

BUF_MEM_free() has no return value.

BUF_MEM_grow() returns zero on error or the new size (i.e. B<len>).

=head1 SEE ALSO

L<bio(3)>,
L<CRYPTO_secure_malloc(3)>.

=head1 HISTORY

BUF_MEM_new_ex() was added in OpenSSL 1.1.0.

=head1 COPYRIGHT

Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the OpenSSL license (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
