]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/mmap.cc
Bill is consistent. Bill is correct. Be like Bill.
[apt.git] / apt-pkg / contrib / mmap.cc
index 74870b404b3f3a9f1d23e72d99002bb84b16ba9b..8fbddbd2f9823bfe838e6445efa0ac2086086aaf 100644 (file)
@@ -40,7 +40,6 @@
 MMap::MMap(FileFd &F,unsigned long Flags) : Flags(Flags), iSize(0),
                      Base(nullptr), SyncToFd(nullptr)
 {
-   if ((Flags & NoImmMap) != NoImmMap)
       Map(F);
 }
                                                                        /*}}}*/
@@ -107,14 +106,14 @@ bool MMap::Map(FileFd &Fd)
            if (unlikely(Base == nullptr))
               return _error->Errno("MMap-malloc", _("Couldn't make mmap of %llu bytes"), iSize);
            SyncToFd = new FileFd();
-           return Fd.Read(Base, iSize);
+           return Fd.Seek(0L) && Fd.Read(Base, iSize);
         }
         // FIXME: Writing to compressed fd's ?
         int const dupped_fd = dup(Fd.Fd());
         if (dupped_fd == -1)
            return _error->Errno("mmap", _("Couldn't duplicate file descriptor %i"), Fd.Fd());
 
-        Base = calloc(iSize, 1);
+        Base = malloc(iSize);
         if (unlikely(Base == nullptr))
            return _error->Errno("MMap-calloc", _("Couldn't make mmap of %llu bytes"), iSize);
         SyncToFd = new FileFd (dupped_fd);
@@ -195,7 +194,7 @@ bool MMap::Sync(unsigned long Start,unsigned long Stop)
    {
       if (SyncToFd != 0)
       {
-        if (!SyncToFd->Seek(0) ||
+        if (!SyncToFd->Seek(Start) ||
             !SyncToFd->Write (((char *)Base)+Start, Stop-Start))
            return false;
       }
@@ -203,7 +202,8 @@ bool MMap::Sync(unsigned long Start,unsigned long Stop)
       {
 #ifdef _POSIX_SYNCHRONIZED_IO
         unsigned long long const PSize = sysconf(_SC_PAGESIZE);
-        if (msync((char *)Base+(Start/PSize)*PSize, Stop - Start, MS_SYNC) < 0)
+         Start = (Start/PSize)*PSize;
+        if (msync((char *)Base+Start, Stop - Start, MS_SYNC) < 0)
            return _error->Errno("msync", _("Unable to synchronize mmap"));
 #endif
       }
@@ -217,7 +217,7 @@ bool MMap::Sync(unsigned long Start,unsigned long Stop)
 /* */
 DynamicMMap::DynamicMMap(FileFd &F,unsigned long Flags,unsigned long const &Workspace,
                         unsigned long const &Grow, unsigned long const &Limit) :
-               MMap(F,Flags | NoImmMap), Fd(&F), WorkSpace(Workspace),
+               MMap(Flags), Fd(&F), WorkSpace(Workspace),
                GrowFactor(Grow), Limit(Limit)
 {
    // disable Moveable if we don't grow
@@ -251,7 +251,7 @@ DynamicMMap::DynamicMMap(FileFd &F,unsigned long Flags,unsigned long const &Work
    and could come in handy later than we are able to grow such an mmap */
 DynamicMMap::DynamicMMap(unsigned long Flags,unsigned long const &WorkSpace,
                         unsigned long const &Grow, unsigned long const &Limit) :
-               MMap(Flags | NoImmMap | UnMapped), Fd(0), WorkSpace(WorkSpace),
+               MMap(Flags | UnMapped), Fd(0), WorkSpace(WorkSpace),
                GrowFactor(Grow), Limit(Limit)
 {
        // disable Moveable if we don't grow