Index: fusl/src/time/__map_file.c |
diff --git a/fusl/src/time/__map_file.c b/fusl/src/time/__map_file.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b91eb8edb986438c75152d737e6f4734b8e04fb1 |
--- /dev/null |
+++ b/fusl/src/time/__map_file.c |
@@ -0,0 +1,20 @@ |
+#include <sys/mman.h> |
+#include <fcntl.h> |
+#include <sys/stat.h> |
+#include "syscall.h" |
+ |
+void *__mmap(void *, size_t, int, int, int, off_t); |
+ |
+const char unsigned *__map_file(const char *pathname, size_t *size) |
+{ |
+ 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)) { |
+ map = __mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0); |
+ *size = st.st_size; |
+ } |
+ __syscall(SYS_close, fd); |
+ return map == MAP_FAILED ? 0 : map; |
+} |