X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/3e2d7cce4febc923d4b9bcb363717dd161cbb856..99158c43616f0c09dc1810ce9913090acd02311e:/apt-pkg/contrib/mmap.cc?ds=sidebyside diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc index 229b18037..4d5fcf71e 100644 --- a/apt-pkg/contrib/mmap.cc +++ b/apt-pkg/contrib/mmap.cc @@ -137,7 +137,6 @@ bool MMap::Sync(unsigned long Start,unsigned long Stop) } /*}}}*/ - /*}}}*/ // DynamicMMap::DynamicMMap - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -173,11 +172,19 @@ DynamicMMap::DynamicMMap(unsigned long Flags,unsigned long WorkSpace) : 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]; @@ -194,7 +201,7 @@ DynamicMMap::~DynamicMMap() if (Fd == 0) { #ifdef _POSIX_MAPPED_FILES - if(munmap(Base, WorkSpace) < 0) + munmap(Base, WorkSpace); #else delete [] (unsigned char *)Base; #endif @@ -310,7 +317,7 @@ unsigned long DynamicMMap::WriteString(const char *String, 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)