compat / mmap.con commit Merge git://git.kernel.org/pub/scm/gitk/gitk (d69dc37)
   1#include <stdio.h>
   2#include <stdlib.h>
   3#include <unistd.h>
   4#include <errno.h>
   5#include "../git-compat-util.h"
   6
   7void *gitfakemmap(void *start, size_t length, int prot , int flags, int fd, off_t offset)
   8{
   9        int n = 0;
  10
  11        if (start != NULL || !(flags & MAP_PRIVATE))
  12                die("Invalid usage of gitfakemmap.");
  13
  14        if (lseek(fd, offset, SEEK_SET) < 0) {
  15                errno = EINVAL;
  16                return MAP_FAILED;
  17        }
  18
  19        start = xmalloc(length);
  20        if (start == NULL) {
  21                errno = ENOMEM;
  22                return MAP_FAILED;
  23        }
  24
  25        while (n < length) {
  26                int count = read(fd, start+n, length-n);
  27
  28                if (count == 0) {
  29                        memset(start+n, 0, length-n);
  30                        break;
  31                }
  32
  33                if (count < 0) {
  34                        free(start);
  35                        errno = EACCES;
  36                        return MAP_FAILED;
  37                }
  38
  39                n += count;
  40        }
  41
  42        return start;
  43}
  44
  45int gitfakemunmap(void *start, size_t length)
  46{
  47        free(start);
  48        return 0;
  49}
  50