]>
git.proxmox.com Git - libgit2.git/blob - src/unix/map.c
2 * Copyright (C) the libgit2 contributors. All rights reserved.
4 * This file is part of libgit2, distributed under the GNU GPL v2 with
5 * a Linking Exception. For full terms see the included COPYING file.
10 #if !defined(GIT_WIN32) && !defined(NO_MMAP)
17 int git__page_size(size_t *page_size
)
19 long sc_page_size
= sysconf(_SC_PAGE_SIZE
);
20 if (sc_page_size
< 0) {
21 git_error_set(GIT_ERROR_OS
, "can't determine system page size");
24 *page_size
= (size_t) sc_page_size
;
28 int git__mmap_alignment(size_t *alignment
)
30 return git__page_size(alignment
);
33 int p_mmap(git_map
*out
, size_t len
, int prot
, int flags
, int fd
, off64_t offset
)
35 int mprot
= PROT_READ
;
38 GIT_MMAP_VALIDATE(out
, len
, prot
, flags
);
43 if (prot
& GIT_PROT_WRITE
)
46 if ((flags
& GIT_MAP_TYPE
) == GIT_MAP_SHARED
)
48 else if ((flags
& GIT_MAP_TYPE
) == GIT_MAP_PRIVATE
)
53 out
->data
= mmap(NULL
, len
, mprot
, mflag
, fd
, offset
);
55 if (!out
->data
|| out
->data
== MAP_FAILED
) {
56 git_error_set(GIT_ERROR_OS
, "failed to mmap. Could not write data");
65 int p_munmap(git_map
*map
)
68 munmap(map
->data
, map
->len
);