X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/51f9f4d78deabf54dbbb6881139d2b1a319ffbfc..7977ed047f967b3e4b4091181acce3eaf7bd8176:/ftparchive/writer.h diff --git a/ftparchive/writer.h b/ftparchive/writer.h index e76438900..ea4c66da4 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -13,13 +13,18 @@ #ifndef WRITER_H #define WRITER_H +#include #include #include #include #include #include +#include +#include +#include +#include "contents.h" #include "cachedb.h" #include "override.h" #include "apt-ftparchive.h" @@ -29,61 +34,80 @@ using std::cout; using std::endl; using std::vector; using std::map; - + class FTWScanner { protected: vector Patterns; + string Arch; + bool IncludeArchAll; const char *OriginalPath; - char *RealPath; bool ErrorPrinted; - + // Stuff for the delinker bool NoLinkAct; - + static FTWScanner *Owner; static int ScannerFTW(const char *File,const struct stat *sb,int Flag); - static int ScannerFile(const char *File, bool ReadLink); + static int ScannerFile(const char *File, bool const &ReadLink); bool Delink(string &FileName,const char *OriginalPath, - unsigned long &Bytes,off_t FileSize); + unsigned long long &Bytes,unsigned long long const &FileSize); - inline void NewLine(unsigned Priority) + inline void NewLine(unsigned const &Priority) { if (ErrorPrinted == false && Quiet <= Priority) { c1out << endl; ErrorPrinted = true; - } + } } - + public: + FileFd *Output; + bool OwnsOutput; + unsigned int DoHashes; unsigned long DeLinkLimit; string InternalPrefix; virtual bool DoPackage(string FileName) = 0; - bool RecursiveScan(string Dir); - bool LoadFileList(string BaseDir,string File); + bool RecursiveScan(string const &Dir); + bool LoadFileList(string const &BaseDir,string const &File); void ClearPatterns() { Patterns.clear(); }; - void AddPattern(string Pattern) { Patterns.push_back(Pattern); }; - bool SetExts(string Vals); - - FTWScanner(); - virtual ~FTWScanner() {delete [] RealPath;}; + void AddPattern(string const &Pattern) { Patterns.push_back(Pattern); }; + void AddPattern(char const *Pattern) { Patterns.push_back(Pattern); }; + void AddPatterns(std::vector const &patterns) { Patterns.insert(Patterns.end(), patterns.begin(), patterns.end()); }; + bool SetExts(string const &Vals); + + FTWScanner(FileFd * const Output, string const &Arch = string(), bool const IncludeArchAll = true); + virtual ~FTWScanner(); +}; + +class MultiCompress; + +class TranslationWriter +{ + MultiCompress *Comp; + std::set Included; + FileFd *Output; + + public: + bool DoPackage(string const &Pkg, string const &Desc, string const &MD5); + + TranslationWriter(string const &File, string const &TransCompress, mode_t const &Permissions); + ~TranslationWriter(); }; class PackagesWriter : public FTWScanner { Override Over; CacheDB Db; - + public: // Some flags - bool DoMD5; - bool DoSHA1; - bool DoSHA256; + bool DoAlwaysStat; bool NoOverride; bool DoContents; bool LongDescription; @@ -91,91 +115,91 @@ class PackagesWriter : public FTWScanner // General options string PathPrefix; string DirStrip; - FILE *Output; struct CacheDB::Stats &Stats; - string Arch; + TranslationWriter * const TransWriter; - inline bool ReadOverride(string File) {return Over.ReadOverride(File);}; - inline bool ReadExtraOverride(string File) + inline bool ReadOverride(string const &File) {return Over.ReadOverride(File);}; + inline bool ReadExtraOverride(string const &File) {return Over.ReadExtraOverride(File);}; - virtual bool DoPackage(string FileName); - - PackagesWriter(string DB,string Overrides,string ExtOverrides=string(), - string Arch=string()); - virtual ~PackagesWriter() {}; + virtual bool DoPackage(string FileName) APT_OVERRIDE; + + PackagesWriter(FileFd * const Output, TranslationWriter * const TransWriter, string const &DB, + string const &Overrides, + string const &ExtOverrides = "", + string const &Arch = "", + bool const IncludeArchAll = true); + virtual ~PackagesWriter(); }; class ContentsWriter : public FTWScanner { CacheDB Db; - + GenContents Gen; - + public: // General options - FILE *Output; struct CacheDB::Stats &Stats; string Prefix; - + bool DoPackage(string FileName,string Package); - virtual bool DoPackage(string FileName) + virtual bool DoPackage(string FileName) APT_OVERRIDE {return DoPackage(FileName,string());}; - bool ReadFromPkgs(string PkgFile,string PkgCompress); + bool ReadFromPkgs(string const &PkgFile,string const &PkgCompress); - void Finish() {Gen.Print(Output);}; - inline bool ReadyDB(string DB) {return Db.ReadyDB(DB);}; - - ContentsWriter(string DB); + void Finish() {Gen.Print(*Output);}; + inline bool ReadyDB(string const &DB) {return Db.ReadyDB(DB);}; + + ContentsWriter(FileFd * const Output, string const &DB, string const &Arch = string(), + bool const IncludeArchAll = true); virtual ~ContentsWriter() {}; }; class SourcesWriter : public FTWScanner { + CacheDB Db; Override BOver; Override SOver; char *Buffer; - unsigned long BufSize; - + unsigned long long BufSize; + public: bool NoOverride; - + bool DoAlwaysStat; + // General options string PathPrefix; string DirStrip; - FILE *Output; - struct CacheDB::Stats Stats; + struct CacheDB::Stats &Stats; - virtual bool DoPackage(string FileName); + virtual bool DoPackage(string FileName) APT_OVERRIDE; - SourcesWriter(string BOverrides,string SOverrides, - string ExtOverrides=string()); + SourcesWriter(FileFd * const Output, string const &DB,string const &BOverrides,string const &SOverrides, + string const &ExtOverrides=string()); virtual ~SourcesWriter() {free(Buffer);}; }; class ReleaseWriter : public FTWScanner { public: - ReleaseWriter(string DB); - virtual bool DoPackage(string FileName); + ReleaseWriter(FileFd * const Output, string const &DB); + virtual bool DoPackage(string FileName) APT_OVERRIDE; void Finish(); - FILE *Output; // General options string PathPrefix; string DirStrip; -protected: struct CheckSum { - string MD5; - string SHA1; - string SHA256; + HashStringList Hashes; // Limited by FileFd::Size() - unsigned long size; + unsigned long long size; ~CheckSum() {}; }; +protected: map CheckSums; };