remove ugly prng from mk*temp and just re-poll time on retry
[musl] / src / stdio / fmemopen.c
1 #if 0
2 #include "stdio_impl.h"
3
4 static ssize_t mread(FILE *f, unsigned char *buf, size_t len)
5 {
6         size_t rem = f->memsize - f->mempos;
7         if (len > rem) len = rem;
8         memcpy(buf, f->membuf+f->mempos, len);
9         f->mempos += len;
10         return len;
11 }
12
13 static ssize_t mwrite(FILE *f, const unsigned char *buf, size_t len)
14 {
15         size_t rem;
16         if (f->memmode == 'a') f->mempos = f->memsize;
17         rem = f->memlim - f->mempos;
18         if (len > rem) len = rem;
19         memcpy(f->membuf+f->mempos, buf, len);
20         f->mempos += len;
21         if (f->mempos >= f->memsize) {
22                 f->memsize = f->mempos;
23         }
24         return len;
25 }
26
27 FILE *fmemopen(void *buf, size_t size, const char *mode)
28 {
29         FILE *f;
30         int plus = !!strchr(mode, '+');
31         
32         if (!size || !strchr("rwa", *mode)) {
33                 errno = EINVAL;
34                 return 0;
35         }
36
37         if (!buf && size > SIZE_MAX-sizeof(FILE)-BUFSIZ-UNGET) {
38                 errno = ENOMEM;
39                 return 0;
40         }
41
42         f = calloc(sizeof(FILE) + UNGET + BUFSIZ + (buf?0:size), 1);
43         if (!f) return 0;
44         f->fd = -1;
45         f->lbf = EOF;
46         f->buf = (unsigned char *)(f+1) + UNGET;
47         f->buf_size = BUFSIZ;
48         if (!buf) buf = f->buf + BUFSIZ;
49         
50         if (!plus) f->flags = (*mode == 'r') ? F_NOWR : F_NORD;
51         if (*mode == 'a') f->mempos = strchr(buf, 0)-buf;
52
53         f->read = mread;
54         f->write = mwrite;
55         f->seek = mseek;
56         f->flush = mflush;
57         f->close = mclose;
58
59         return f;
60 }
61 #endif