+ size_t rem = f->memsize - f->mempos;
+ if (len > rem) len = rem;
+ memcpy(buf, f->membuf+f->mempos, len);
+ f->mempos += len;
+ return len;
+}
+
+static ssize_t mwrite(FILE *f, const unsigned char *buf, size_t len)
+{
+ size_t rem;
+ if (f->memmode == 'a') f->mempos = f->memsize;
+ rem = f->memlim - f->mempos;
+ if (len > rem) len = rem;
+ memcpy(f->membuf+f->mempos, buf, len);
+ f->mempos += len;
+ if (f->mempos >= f->memsize) {
+ f->memsize = f->mempos;
+ }
+ return len;