X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/3278fe66567d149ea92c1afa78941f2bc3c71c85..7852873a1347fcab50393b545cc1e6edd65531c8:/ftparchive/writer.h diff --git a/ftparchive/writer.h b/ftparchive/writer.h index 4932b0cc8..98012beee 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -13,6 +13,7 @@ #ifndef WRITER_H #define WRITER_H +#include #include #include @@ -20,7 +21,10 @@ #include #include #include +#include +#include +#include "contents.h" #include "cachedb.h" #include "override.h" #include "apt-ftparchive.h" @@ -38,10 +42,10 @@ class FTWScanner string Arch; const char *OriginalPath; 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 const &ReadLink); @@ -55,14 +59,13 @@ class FTWScanner { c1out << endl; ErrorPrinted = true; - } + } } - + public: - bool DoMD5; - bool DoSHA1; - bool DoSHA256; - bool DoSHA512; + FileFd *Output; + bool OwnsOutput; + unsigned int DoHashes; unsigned long DeLinkLimit; string InternalPrefix; @@ -75,9 +78,9 @@ class FTWScanner 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(string const &Arch = string()); - virtual ~FTWScanner() {}; + + FTWScanner(FileFd * const Output, string const &Arch = string()); + virtual ~FTWScanner(); }; class MultiCompress; @@ -85,18 +88,13 @@ class MultiCompress; class TranslationWriter { MultiCompress *Comp; - FILE *Output; std::set Included; - unsigned short RefCounter; + FileFd *Output; public: - void IncreaseRefCounter() { ++RefCounter; }; - unsigned short DecreaseRefCounter() { return (RefCounter == 0) ? 0 : --RefCounter; }; - unsigned short GetRefCounter() const { return RefCounter; }; bool DoPackage(string const &Pkg, string const &Desc, string const &MD5); TranslationWriter(string const &File, string const &TransCompress, mode_t const &Permissions); - TranslationWriter() : Comp(NULL), Output(NULL), RefCounter(0) {}; ~TranslationWriter(); }; @@ -104,7 +102,7 @@ class PackagesWriter : public FTWScanner { Override Over; CacheDB Db; - + public: // Some flags @@ -116,42 +114,42 @@ class PackagesWriter : public FTWScanner // General options string PathPrefix; string DirStrip; - FILE *Output; struct CacheDB::Stats &Stats; - TranslationWriter *TransWriter; + TranslationWriter * const TransWriter; 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); + virtual bool DoPackage(string FileName) APT_OVERRIDE; - PackagesWriter(string const &DB,string const &Overrides,string const &ExtOverrides=string(), - string const &Arch=string()); - virtual ~PackagesWriter() {}; + PackagesWriter(FileFd * const Output, TranslationWriter * const TransWriter, string const &DB, + string const &Overrides, + string const &ExtOverrides = "", + string const &Arch = ""); + 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 const &PkgFile,string const &PkgCompress); - void Finish() {Gen.Print(Output);}; + void Finish() {Gen.Print(*Output);}; inline bool ReadyDB(string const &DB) {return Db.ReadyDB(DB);}; - - ContentsWriter(string const &DB, string const &Arch = string()); + + ContentsWriter(FileFd * const Output, string const &DB, string const &Arch = string()); virtual ~ContentsWriter() {}; }; @@ -162,21 +160,20 @@ class SourcesWriter : public FTWScanner Override SOver; char *Buffer; 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 const &DB,string const &BOverrides,string const &SOverrides, + SourcesWriter(FileFd * const Output, string const &DB,string const &BOverrides,string const &SOverrides, string const &ExtOverrides=string()); virtual ~SourcesWriter() {free(Buffer);}; }; @@ -184,26 +181,22 @@ class SourcesWriter : public FTWScanner class ReleaseWriter : public FTWScanner { public: - ReleaseWriter(string const &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; - string SHA512; + HashStringList Hashes; // Limited by FileFd::Size() unsigned long long size; ~CheckSum() {}; }; +protected: map CheckSums; };