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