X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/8c58f506d753d736184f3d764a200efce6c9cdf3..f7feb041e8d8dac5fac3c6cd44c8108e12ea4cd6:/ftparchive/writer.h diff --git a/ftparchive/writer.h b/ftparchive/writer.h index cc6375875..86884dcfc 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: writer.h,v 1.3 2001/05/29 04:08:09 jgg Exp $ +// $Id: writer.h,v 1.4.2.2 2003/12/26 22:55:43 mdz Exp $ /* ###################################################################### Writer @@ -13,14 +13,16 @@ #ifndef WRITER_H #define WRITER_H -#ifdef __GNUG__ -#pragma interface "writer.h" -#endif - #include #include #include +#include +#include +#include +#include +#include +#include "contents.h" #include "cachedb.h" #include "override.h" #include "apt-ftparchive.h" @@ -28,47 +30,76 @@ using std::string; using std::cout; using std::endl; - +using std::vector; +using std::map; + class FTWScanner { protected: - - char *TmpExt; - const char *Ext[10]; + vector Patterns; + string Arch; const char *OriginalPath; - char *RealPath; bool ErrorPrinted; // Stuff for the delinker bool NoLinkAct; static FTWScanner *Owner; - static int Scanner(const char *File,const struct stat *sb,int Flag); + static int ScannerFTW(const char *File,const struct stat *sb,int Flag); + static int ScannerFile(const char *File, bool const &ReadLink); bool Delink(string &FileName,const char *OriginalPath, - unsigned long &Bytes,struct stat &St); + 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) { - cout << endl; + c1out << endl; ErrorPrinted = true; } } public: + bool DoMD5; + bool DoSHA1; + bool DoSHA256; + bool DoSHA512; unsigned long DeLinkLimit; string InternalPrefix; virtual bool DoPackage(string FileName) = 0; - bool RecursiveScan(string Dir); - bool LoadFileList(string BaseDir,string File); - bool SetExts(string Vals); + bool RecursiveScan(string const &Dir); + bool LoadFileList(string const &BaseDir,string const &File); + void ClearPatterns() { Patterns.clear(); }; + 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(); - virtual ~FTWScanner() {delete [] RealPath; delete [] TmpExt;}; + FTWScanner(string const &Arch = string()); + virtual ~FTWScanner() {}; +}; + +class MultiCompress; + +class TranslationWriter +{ + MultiCompress *Comp; + FILE *Output; + std::set Included; + unsigned short RefCounter; + + 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(); }; class PackagesWriter : public FTWScanner @@ -79,20 +110,25 @@ class PackagesWriter : public FTWScanner public: // Some flags - bool DoMD5; + bool DoAlwaysStat; bool NoOverride; bool DoContents; + bool LongDescription; // General options string PathPrefix; string DirStrip; FILE *Output; struct CacheDB::Stats &Stats; - - inline bool ReadOverride(string File) {return Over.ReadOverride(File);}; + TranslationWriter *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); - PackagesWriter(string DB,string Overrides); + PackagesWriter(string const &DB,string const &Overrides,string const &ExtOverrides=string(), + string const &Arch=string()); virtual ~PackagesWriter() {}; }; @@ -112,25 +148,27 @@ class ContentsWriter : public FTWScanner bool DoPackage(string FileName,string Package); virtual bool DoPackage(string FileName) {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);}; + inline bool ReadyDB(string const &DB) {return Db.ReadyDB(DB);}; - ContentsWriter(string DB); + ContentsWriter(string const &DB, string const &Arch = string()); 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; @@ -138,13 +176,37 @@ class SourcesWriter : public FTWScanner FILE *Output; struct CacheDB::Stats Stats; -/* inline bool ReadBinOverride(string File) {return BOver.ReadOverride(File);}; - bool ReadSrcOverride(string File); // {return BOver.ReadOverride(File);};*/ virtual bool DoPackage(string FileName); - SourcesWriter(string BOverrides,string SOverrides); + SourcesWriter(string const &DB,string const &BOverrides,string const &SOverrides, + string const &ExtOverrides=string()); virtual ~SourcesWriter() {free(Buffer);}; }; +class ReleaseWriter : public FTWScanner +{ +public: + ReleaseWriter(string const &DB); + virtual bool DoPackage(string FileName); + void Finish(); + + FILE *Output; + // General options + string PathPrefix; + string DirStrip; + +protected: + struct CheckSum + { + string MD5; + string SHA1; + string SHA256; + string SHA512; + // Limited by FileFd::Size() + unsigned long long size; + ~CheckSum() {}; + }; + map CheckSums; +}; #endif