|
@@ -59,14 +59,21 @@ FILE *open_memstream(char **bufp, size_t *sizep)
|
|
{
|
|
{
|
|
FILE *f;
|
|
FILE *f;
|
|
struct cookie *c;
|
|
struct cookie *c;
|
|
|
|
+ char *buf;
|
|
|
|
+
|
|
if (!(f=malloc(sizeof *f + sizeof *c + BUFSIZ))) return 0;
|
|
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);
|
|
memset(f, 0, sizeof *f + sizeof *c);
|
|
f->cookie = c = (void *)(f+1);
|
|
f->cookie = c = (void *)(f+1);
|
|
|
|
|
|
c->bufp = bufp;
|
|
c->bufp = bufp;
|
|
c->sizep = sizep;
|
|
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->flags = F_NORD;
|
|
f->fd = -1;
|
|
f->fd = -1;
|