1#include "../git-compat-util.h"
   2void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset)
   4{
   5        size_t n = 0;
   6        if (start != NULL || !(flags & MAP_PRIVATE))
   8                die("Invalid usage of mmap when built with NO_MMAP");
   9        start = xmalloc(length);
  11        if (start == NULL) {
  12                errno = ENOMEM;
  13                return MAP_FAILED;
  14        }
  15        while (n < length) {
  17                ssize_t count = xpread(fd, (char *)start + n, length - n, offset + n);
  18                if (count == 0) {
  20                        memset((char *)start+n, 0, length-n);
  21                        break;
  22                }
  23                if (count < 0) {
  25                        free(start);
  26                        errno = EACCES;
  27                        return MAP_FAILED;
  28                }
  29                n += count;
  31        }
  32        return start;
  34}
  35int git_munmap(void *start, size_t length)
  37{
  38        free(start);
  39        return 0;
  40}