res_send: use a temp buffer if caller's buffer is under 512 bytes
[musl] / src / stdio / __fopen_rb_ca.c
index 4ba50d6..183a5d5 100644 (file)
@@ -1,11 +1,14 @@
 #include "stdio_impl.h"
+#include <fcntl.h>
+#include <string.h>
 
 FILE *__fopen_rb_ca(const char *filename, FILE *f, unsigned char *buf, size_t len)
 {
        memset(f, 0, sizeof *f);
 
-       f->fd = syscall(SYS_open, filename, O_RDONLY|O_LARGEFILE, 0);
+       f->fd = sys_open(filename, O_RDONLY|O_CLOEXEC);
        if (f->fd < 0) return 0;
+       __syscall(SYS_fcntl, f->fd, F_SETFD, FD_CLOEXEC);
 
        f->flags = F_NOWR | F_PERM;
        f->buf = buf + UNGET;
@@ -13,6 +16,7 @@ FILE *__fopen_rb_ca(const char *filename, FILE *f, unsigned char *buf, size_t le
        f->read = __stdio_read;
        f->seek = __stdio_seek;
        f->close = __stdio_close;
+       f->lock = -1;
 
        return f;
 }