mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
object-file: move xmmap() into "wrapper.c"
The `xmmap()` function is provided by "object-file.c" even though its functionality has nothing to do with the object file subsystem. Move it into "wrapper.c", whose header already declares those functions. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
97dc141fd6
commit
632b5e3ee2
48
wrapper.c
48
wrapper.c
@@ -829,3 +829,51 @@ uint32_t git_rand(unsigned flags)
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void mmap_limit_check(size_t length)
|
||||
{
|
||||
static size_t limit = 0;
|
||||
if (!limit) {
|
||||
limit = git_env_ulong("GIT_MMAP_LIMIT", 0);
|
||||
if (!limit)
|
||||
limit = SIZE_MAX;
|
||||
}
|
||||
if (length > limit)
|
||||
die(_("attempting to mmap %"PRIuMAX" over limit %"PRIuMAX),
|
||||
(uintmax_t)length, (uintmax_t)limit);
|
||||
}
|
||||
|
||||
void *xmmap_gently(void *start, size_t length,
|
||||
int prot, int flags, int fd, off_t offset)
|
||||
{
|
||||
void *ret;
|
||||
|
||||
mmap_limit_check(length);
|
||||
ret = mmap(start, length, prot, flags, fd, offset);
|
||||
if (ret == MAP_FAILED && !length)
|
||||
ret = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
const char *mmap_os_err(void)
|
||||
{
|
||||
static const char blank[] = "";
|
||||
#if defined(__linux__)
|
||||
if (errno == ENOMEM) {
|
||||
/* this continues an existing error message: */
|
||||
static const char enomem[] =
|
||||
", check sys.vm.max_map_count and/or RLIMIT_DATA";
|
||||
return enomem;
|
||||
}
|
||||
#endif /* OS-specific bits */
|
||||
return blank;
|
||||
}
|
||||
|
||||
void *xmmap(void *start, size_t length,
|
||||
int prot, int flags, int fd, off_t offset)
|
||||
{
|
||||
void *ret = xmmap_gently(start, length, prot, flags, fd, offset);
|
||||
if (ret == MAP_FAILED)
|
||||
die_errno(_("mmap failed%s"), mmap_os_err());
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user