=pod

=head1 NAME

BUF_MEM_new, BUF_MEM_free, BUF_MEM_grow, BUF_strdup - simple
character arrays structure

=head1 SYNOPSIS

 #include <openssl/buffer.h>

 BUF_MEM *BUF_MEM_new(void);

 void	BUF_MEM_free(BUF_MEM *a);

 int	BUF_MEM_grow(BUF_MEM *str, int len);

 char *	BUF_strdup(const char *str);

=head1 DESCRIPTION

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
 {
        int length;     /* current number of bytes */
        char *data;
        int max;        /* size of buffer */
 } BUF_MEM;

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

BUF_MEM_new() allocates a new buffer of zero size.

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.

BUF_strdup() copies a null terminated string into a block of allocated
memory and returns a pointer to the allocated block.
Unlike the standard C library strdup() this function uses Malloc() and so
should be used in preference to the standard library strdup() because it can
be used for memory leak checking or replacing the malloc() function.

The memory allocated from BUF_strdup() should be freed up using the Free()
function.

=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)|bio(3)>

=head1 HISTORY

BUF_MEM_new(), BUF_MEM_free() and BUF_MEM_grow() are available in all
versions of SSLeay and OpenSSL. BUF_strdup() was addded in SSLeay 0.8.

=cut
