mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
Our mmap compat code emulates mapping by using malloc/free. Our git_munmap() must take a "length" parameter to match the interface of munmap(), but we don't use it (it is up to the allocator to know how big the block is in free()). Let's mark it as UNUSED to avoid complaints from -Wunused-parameter. Otherwise you cannot build with "make DEVELOPER=1 NO_MMAP=1". Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
46 lines
773 B
C
46 lines
773 B
C
#include "../git-compat-util.h"
|
|
|
|
void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset)
|
|
{
|
|
size_t n = 0;
|
|
|
|
if (start != NULL || flags != MAP_PRIVATE || prot != PROT_READ)
|
|
die("Invalid usage of mmap when built with NO_MMAP");
|
|
|
|
if (length == 0) {
|
|
errno = EINVAL;
|
|
return MAP_FAILED;
|
|
}
|
|
|
|
start = malloc(length);
|
|
if (!start) {
|
|
errno = ENOMEM;
|
|
return MAP_FAILED;
|
|
}
|
|
|
|
while (n < length) {
|
|
ssize_t count = xpread(fd, (char *)start + n, length - n, offset + n);
|
|
|
|
if (count == 0) {
|
|
memset((char *)start+n, 0, length-n);
|
|
break;
|
|
}
|
|
|
|
if (count < 0) {
|
|
free(start);
|
|
errno = EACCES;
|
|
return MAP_FAILED;
|
|
}
|
|
|
|
n += count;
|
|
}
|
|
|
|
return start;
|
|
}
|
|
|
|
int git_munmap(void *start, size_t length UNUSED)
|
|
{
|
|
free(start);
|
|
return 0;
|
|
}
|