X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fstdio%2Fopen_wmemstream.c;h=4d90cd971964f5f91f6dca091e2f2a0d82d4b934;hb=d184a09e0529f33d8ddddb8825039133483a2c41;hp=35370309d6fd2a8cdd8f91fea0c8820d57caedd7;hpb=c6d441e3a246370d9c459396ec22b096db93850e;p=musl diff --git a/src/stdio/open_wmemstream.c b/src/stdio/open_wmemstream.c index 35370309..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; @@ -81,11 +88,5 @@ FILE *open_wmemstream(wchar_t **bufp, size_t *sizep) if (!libc.threaded) f->lock = -1; - OFLLOCK(); - f->next = libc.ofl_head; - if (libc.ofl_head) libc.ofl_head->prev = f; - libc.ofl_head = f; - OFLUNLOCK(); - - return f; + return __ofl_add(f); }