X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/8c658284d9c1ffe27d489c53ee9f443478185f39..d27daedb6a0bf672508072100f20233d08ccf0e0:/apt-pkg/contrib/mmap.h diff --git a/apt-pkg/contrib/mmap.h b/apt-pkg/contrib/mmap.h index cd2b15ba2..c1dfedf6d 100644 --- a/apt-pkg/contrib/mmap.h +++ b/apt-pkg/contrib/mmap.h @@ -6,7 +6,7 @@ MMap Class - Provides 'real' mmap or a faked mmap using read(). The purpose of this code is to provide a generic way for clients to - access the mmap function. In enviroments that do not support mmap + access the mmap function. In environments that do not support mmap from file fd's this function will use read and normal allocated memory. @@ -15,7 +15,7 @@ The DynamicMMap class is used to help the on-disk data structure generators. It provides a large allocated workspace and members - to allocate space from the workspace in an effecient fashion. + to allocate space from the workspace in an efficient fashion. This source is placed in the Public Domain, do with it what you will It was originally written by Jason Gunthorpe. @@ -27,9 +27,13 @@ #include -#include +#ifndef APT_8_CLEANER_HEADERS +#include using std::string; +#endif + +class FileFd; /* This should be a 32 bit type, larger tyes use too much ram and smaller types are too small. Where ever possible 'unsigned long' should be used @@ -41,9 +45,14 @@ class MMap protected: unsigned long Flags; - unsigned long iSize; + unsigned long long iSize; void *Base; + // In case mmap can not be used, we keep a dup of the file + // descriptor that should have been mmaped so that we can write to + // the file in Sync(). + FileFd *SyncToFd; + bool Map(FileFd &Fd); bool Close(bool DoSync = true); @@ -55,7 +64,9 @@ class MMap // Simple accessors inline operator void *() {return Base;}; inline void *Data() {return Base;}; - inline unsigned long Size() {return iSize;}; + inline unsigned long long Size() {return iSize;}; + inline void AddSize(unsigned long long const size) {iSize += size;}; + inline bool validData() const { return Base != (void *)-1 && Base != 0; }; // File manipulators bool Sync(); @@ -92,10 +103,10 @@ class DynamicMMap : public MMap public: // Allocation - unsigned long RawAllocate(unsigned long Size,unsigned long Aln = 0); + unsigned long RawAllocate(unsigned long long Size,unsigned long Aln = 0); unsigned long Allocate(unsigned long ItemSize); unsigned long WriteString(const char *String,unsigned long Len = (unsigned long)-1); - inline unsigned long WriteString(const string &S) {return WriteString(S.c_str(),S.length());}; + inline unsigned long WriteString(const std::string &S) {return WriteString(S.c_str(),S.length());}; void UsePools(Pool &P,unsigned int Count) {Pools = &P; PoolCount = Count;}; DynamicMMap(FileFd &F,unsigned long Flags,unsigned long const &WorkSpace = 2*1024*1024,