Import Cobalt 24.master.0.1032339
diff --git a/third_party/musl/src/stdio/fmemopen.c b/third_party/musl/src/stdio/fmemopen.c
index 5e0eeb5..343e3e3 100644
--- a/third_party/musl/src/stdio/fmemopen.c
+++ b/third_party/musl/src/stdio/fmemopen.c
@@ -1,7 +1,10 @@
 #include "stdio_impl.h"
 #include <errno.h>
 #include <string.h>
+#include <stdlib.h>
+#include <stddef.h>
 #include <inttypes.h>
+#include "libc.h"
 
 struct cookie {
 	size_t pos, len, size;
@@ -81,7 +84,7 @@
 	struct mem_FILE *f;
 	int plus = !!strchr(mode, '+');
 	
-	if (!size || !strchr("rwa", *mode)) {
+	if (!strchr("rwa", *mode)) {
 		errno = EINVAL;
 		return 0;
 	}
@@ -93,18 +96,17 @@
 
 	f = malloc(sizeof *f + (buf?0:size));
 	if (!f) return 0;
-	memset(&f->f, 0, sizeof f->f);
+	memset(f, 0, offsetof(struct mem_FILE, buf));
 	f->f.cookie = &f->c;
 	f->f.fd = -1;
 	f->f.lbf = EOF;
 	f->f.buf = f->buf + UNGET;
 	f->f.buf_size = sizeof f->buf - UNGET;
 	if (!buf) {
-		buf = f->buf2;;
+		buf = f->buf2;
 		memset(buf, 0, size);
 	}
 
-	memset(&f->c, 0, sizeof f->c);
 	f->c.buf = buf;
 	f->c.size = size;
 	f->c.mode = *mode;