fix bug in dladdr that prevented resolving addresses in the PLT
[oweals/musl.git] / src / stdio / __fopen_rb_ca.c
index 4ba50d61470311ca28fa3f6370f0a70552765ff7..9202c8ce5c1423b33bdfc571cd93d16db2d4af5b 100644 (file)
@@ -1,10 +1,12 @@
 #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 = syscall(SYS_open, filename, O_RDONLY|O_LARGEFILE|O_CLOEXEC, 0);
        if (f->fd < 0) return 0;
 
        f->flags = F_NOWR | F_PERM;
@@ -13,6 +15,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;
 }