.\" $OpenBSD: open_memstream.3,v 1.4 2013/06/05 03:39:23 tedu Exp $ .\" .\" Copyright (c) 2011 Martin Pieuchot .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above .\" copyright notice and this permission notice appear in all copies. .\" .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" .Dd $Mdocdate: June 5 2013 $ .Dt OPEN_MEMSTREAM 3 .Os .Sh NAME .Nm open_memstream , .Nm open_wmemstream .Nd open a memory buffer stream .Sh SYNOPSIS .In stdio.h .Ft FILE * .Fn open_memstream "char **pbuf" "size_t *psize" .In wchar.h .Ft FILE * .Fn open_wmemstream "wchar_t **pbuf" "size_t *psize" .Sh DESCRIPTION The .Fn open_memstream and .Fn open_wmemstream functions create, respectively, a seekable byte-oriented or wide-oriented stream for writing. A dynamically allocated buffer, using .Xr malloc 3 , is then wrapped to the pointer referenced by .Fa pbuf and grows automatically as required. .Pp When the stream is either closed or flushed, the address of the buffer is stored in the pointer referenced by .Fa pbuf . At the same time the smaller of the current position and the buffer length is written in the variable pointed to by .Fa psize . This value represents, respectively, the number of bytes or wide characters contained in the buffer, not including the terminating null character. .Pp The buffer memory should be released after the stream is closed. .Sh RETURN VALUES Upon successful completion, .Fn open_memstream and .Fn open_wmemstream return a .Dv FILE pointer. Otherwise, .Dv NULL is returned and the global variable .Va errno is set to indicate the error. .Sh ERRORS .Bl -tag -width Er .It Bq Er EINVAL The .Fa pbuf or the .Fa psize argument is .Dv NULL . .El .Pp The .Fn open_memstream and .Fn open_wmemstream functions may also fail and set .Va errno for any of the errors specified for the routine .Xr malloc 3 . .Sh SEE ALSO .Xr fmemopen 3 , .Xr fopen 3 , .Xr funopen 3 , .Xr malloc 3 .Sh STANDARDS The functions .Fn open_memstream and .Fn open_wmemstream , conform to .St -p1003.1-2008 . .Sh HISTORY The .Fn open_memstream and .Fn open_wmemstream functions first appeared in .Ox 5.4 .