}
/*}}}*/
- /*}}}*/
// DynamicMMap::DynamicMMap - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* */
return;
#ifdef _POSIX_MAPPED_FILES
+ // Set the permissions.
+ int Prot = PROT_READ;
+ int Map = MAP_PRIVATE | MAP_ANONYMOUS;
+ if ((Flags & ReadOnly) != ReadOnly)
+ Prot |= PROT_WRITE;
+ if ((Flags & Public) == Public)
+ Map = MAP_SHARED | MAP_ANONYMOUS;
+
// use anonymous mmap() to get the memory
- Base = (unsigned char*) mmap(0, WorkSpace, PROT_READ|PROT_WRITE,
- MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
+ Base = (unsigned char*) mmap(0, WorkSpace, Prot, Map, -1, 0);
+
if(Base == MAP_FAILED)
- return;
+ _error->Errno("DynamicMMap",_("Couldn't make mmap of %lu bytes"),WorkSpace);
#else
// fallback to a static allocated space
Base = new unsigned char[WorkSpace];
if (Fd == 0)
{
#ifdef _POSIX_MAPPED_FILES
- if(munmap(Base, WorkSpace) < 0)
+ munmap(Base, WorkSpace);
#else
delete [] (unsigned char *)Base;
#endif
but why we should not at least try to grow it before we give up? */
bool DynamicMMap::Grow()
{
-#ifdef _POSIX_MAPPED_FILES
+#if defined(_POSIX_MAPPED_FILES) && defined(__linux__)
unsigned long newSize = WorkSpace + 1024*1024;
if(Fd != 0)