1#include <fcntl.h> 2#include <sys/mman.h> 3#include <sys/stat.h> 4#include <unistd.h> 5 6void* __mmap(void*, size_t, int, int, int, off_t); 7 8const char unsigned* __map_file(const char* pathname, size_t* size) { 9 struct stat st; 10 const unsigned char* map = MAP_FAILED; 11 int fd = open(pathname, O_RDONLY | O_CLOEXEC | O_NONBLOCK); 12 if (fd < 0) 13 return 0; 14 if (!fstat(fd, &st)) { 15 map = __mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0); 16 *size = st.st_size; 17 } 18 close(fd); 19 return map == MAP_FAILED ? 0 : map; 20} 21