c741aede152d55e076fb564ba6320a6918d65e5d
[musl] / src / stdio / fopen.c
1 #include "stdio_impl.h"
2
3 FILE *fopen(const char *restrict filename, const char *restrict mode)
4 {
5         FILE *f;
6         int fd;
7         int flags;
8
9         /* Check for valid initial mode character */
10         if (!strchr("rwa", *mode)) {
11                 errno = EINVAL;
12                 return 0;
13         }
14
15         /* Compute the flags to pass to open() */
16         flags = __fmodeflags(mode);
17
18         fd = syscall_cp(SYS_open, filename, flags|O_LARGEFILE, 0666);
19         if (fd < 0) return 0;
20
21         f = __fdopen(fd, mode);
22         if (f) return f;
23
24         __syscall(SYS_close, fd);
25         return 0;
26 }
27
28 LFS64(fopen);