#include "../git-compat-util.h" void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset) { size_t n = 0; if (start != NULL || flags != MAP_PRIVATE || prot != PROT_READ) die("Invalid usage of mmap when built with NO_MMAP"); start = xmalloc(length); if (start == NULL) { errno = ENOMEM; return MAP_FAILED; } while (n < length) { ssize_t count = xpread(fd, (char *)start + n, length - n, offset + n); if (count == 0) { memset((char *)start+n, 0, length-n); break; } if (count < 0) { free(start); errno = EACCES; return MAP_FAILED; } n += count; } return start; } int git_munmap(void *start, size_t length) { free(start); return 0; }