]> git.proxmox.com Git - libgit2.git/blobdiff - src/unix/map.c
New upstream version 1.4.3+dfsg.1
[libgit2.git] / src / unix / map.c
index 0a235d5a1b4f593e539c1fa6246475bbf58abec1..23fcb786e5ab3a4d396a78f92025c868bf760885 100644 (file)
@@ -4,7 +4,8 @@
  * This file is part of libgit2, distributed under the GNU GPL v2 with
  * a Linking Exception. For full terms see the included COPYING file.
  */
-#include <git2/common.h>
+
+#include "common.h"
 
 #if !defined(GIT_WIN32) && !defined(NO_MMAP)
 
@@ -17,16 +18,21 @@ int git__page_size(size_t *page_size)
 {
        long sc_page_size = sysconf(_SC_PAGE_SIZE);
        if (sc_page_size < 0) {
-               giterr_set_str(GITERR_OS, "Can't determine system page size");
+               git_error_set(GIT_ERROR_OS, "can't determine system page size");
                return -1;
        }
        *page_size = (size_t) sc_page_size;
        return 0;
 }
 
-int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offset)
+int git__mmap_alignment(size_t *alignment)
+{
+  return git__page_size(alignment);
+}
+
+int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, off64_t offset)
 {
-       int mprot = 0;
+       int mprot = PROT_READ;
        int mflag = 0;
 
        GIT_MMAP_VALIDATE(out, len, prot, flags);
@@ -35,9 +41,7 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offs
        out->len = 0;
 
        if (prot & GIT_PROT_WRITE)
-               mprot = PROT_WRITE;
-       else if (prot & GIT_PROT_READ)
-               mprot = PROT_READ;
+               mprot |= PROT_WRITE;
 
        if ((flags & GIT_MAP_TYPE) == GIT_MAP_SHARED)
                mflag = MAP_SHARED;
@@ -49,7 +53,7 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offs
        out->data = mmap(NULL, len, mprot, mflag, fd, offset);
 
        if (!out->data || out->data == MAP_FAILED) {
-               giterr_set(GITERR_OS, "Failed to mmap. Could not write data");
+               git_error_set(GIT_ERROR_OS, "failed to mmap. Could not write data");
                return -1;
        }
 
@@ -60,8 +64,10 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offs
 
 int p_munmap(git_map *map)
 {
-       assert(map != NULL);
+       GIT_ASSERT_ARG(map);
        munmap(map->data, map->len);
+       map->data = NULL;
+       map->len = 0;
 
        return 0;
 }