drop direct use of stat syscalls in internal __map_file
authorRich Felker <dalias@aerifal.cx>
Thu, 28 Apr 2022 06:18:42 +0000 (02:18 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 2 May 2022 03:25:21 +0000 (23:25 -0400)
this function is used to implement some baseline ISO C interfaces, so
it cannot call any of the stat functions by their public names. use
the namespace-safe __fstatat instead.

src/time/__map_file.c

index d3cefa8..8ef3613 100644 (file)
@@ -1,16 +1,16 @@
+#define _BSD_SOURCE
 #include <sys/mman.h>
 #include <fcntl.h>
 #include <sys/stat.h>
 #include "syscall.h"
-#include "kstat.h"
 
 const char unsigned *__map_file(const char *pathname, size_t *size)
 {
-       struct kstat st;
+       struct stat st;
        const unsigned char *map = MAP_FAILED;
        int fd = sys_open(pathname, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
        if (fd < 0) return 0;
-       if (!syscall(SYS_fstat, fd, &st)) {
+       if (!__fstatat(fd, "", &st, AT_EMPTY_PATH)) {
                map = __mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
                *size = st.st_size;
        }