]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/mmap.cc
* apt-pkg/cdrom.{cc,h}:
[apt.git] / apt-pkg / contrib / mmap.cc
index 69fb61fca7cd1a1e516d64bc1289deeef1b9b54d..19381ae4719ea7005ac338463bdbe7e4a5e3cd95 100644 (file)
@@ -106,7 +106,7 @@ bool MMap::Map(FileFd &Fd)
 /* */
 bool MMap::Close(bool DoSync)
 {
-   if ((Flags & UnMapped) == UnMapped || Base == 0 || iSize == 0)
+   if ((Flags & UnMapped) == UnMapped || validData() == false || iSize == 0)
       return true;
    
    if (DoSync == true)
@@ -237,11 +237,19 @@ DynamicMMap::DynamicMMap(unsigned long Flags,unsigned long const &WorkSpace,
        if ((this->Flags & Fallback) != Fallback) {
                // Set the permissions.
                int Prot = PROT_READ;
+#ifdef MAP_ANONYMOUS
                int Map = MAP_PRIVATE | MAP_ANONYMOUS;
+#else
+               int Map = MAP_PRIVATE | MAP_ANON;
+#endif
                if ((this->Flags & ReadOnly) != ReadOnly)
                        Prot |= PROT_WRITE;
                if ((this->Flags & Public) == Public)
+#ifdef MAP_ANONYMOUS
                        Map = MAP_SHARED | MAP_ANONYMOUS;
+#else
+                       Map = MAP_SHARED | MAP_ANON;
+#endif
 
                // use anonymous mmap() to get the memory
                Base = (unsigned char*) mmap(0, WorkSpace, Prot, Map, -1, 0);
@@ -266,6 +274,8 @@ DynamicMMap::~DynamicMMap()
 {
    if (Fd == 0)
    {
+      if (validData() == false)
+        return;
 #ifdef _POSIX_MAPPED_FILES
       munmap(Base, WorkSpace);
 #else