diff options
| -rw-r--r-- | src/stdio/open_memstream.c | 11 | ||||
| -rw-r--r-- | src/stdio/open_wmemstream.c | 11 | 
2 files changed, 18 insertions, 4 deletions
diff --git a/src/stdio/open_memstream.c b/src/stdio/open_memstream.c index 58504c9f..eab024da 100644 --- a/src/stdio/open_memstream.c +++ b/src/stdio/open_memstream.c @@ -59,14 +59,21 @@ FILE *open_memstream(char **bufp, size_t *sizep)  {  	FILE *f;  	struct cookie *c; +	char *buf; +  	if (!(f=malloc(sizeof *f + sizeof *c + BUFSIZ))) return 0; +	if (!(buf=malloc(sizeof *buf))) { +		free(f); +		return 0; +	}  	memset(f, 0, sizeof *f + sizeof *c);  	f->cookie = c = (void *)(f+1);  	c->bufp = bufp;  	c->sizep = sizep; -	c->pos = c->len = c->space = 0; -	c->buf = 0; +	c->pos = c->len = c->space = *sizep = 0; +	c->buf = *bufp = buf; +	*buf = 0;  	f->flags = F_NORD;  	f->fd = -1; diff --git a/src/stdio/open_wmemstream.c b/src/stdio/open_wmemstream.c index 7ab2c643..4d90cd97 100644 --- a/src/stdio/open_wmemstream.c +++ b/src/stdio/open_wmemstream.c @@ -61,14 +61,21 @@ FILE *open_wmemstream(wchar_t **bufp, size_t *sizep)  {  	FILE *f;  	struct cookie *c; +	wchar_t *buf; +  	if (!(f=malloc(sizeof *f + sizeof *c))) return 0; +	if (!(buf=malloc(sizeof *buf))) { +		free(f); +		return 0; +	}  	memset(f, 0, sizeof *f + sizeof *c);  	f->cookie = c = (void *)(f+1);  	c->bufp = bufp;  	c->sizep = sizep; -	c->pos = c->len = c->space = 0; -	c->buf = 0; +	c->pos = c->len = c->space = *sizep = 0; +	c->buf = *bufp = buf; +	*buf = 0;  	f->flags = F_NORD;  	f->fd = -1;  | 
