diff options
author | David Kalnischkies <david@kalnischkies.de> | 2015-05-11 15:08:08 +0200 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2015-05-11 17:22:33 +0200 |
commit | 88593886a42025d51d76051da5929b044e42efee (patch) | |
tree | 6212ec08e3ac872573ca5faefb400a7914051bee /ftparchive/writer.h | |
parent | 8d058ea53b18348f81229049a27d14282bd8d8c1 (diff) |
rewrite all TFRewrite instances to use the new pkgTagSection::Write
While it is mostly busywork to rewrite all instances it actually fixes
bugs as the data storage used by the new method is std::string rather
than a char*, the later mostly created by c_str() from a std::string
which the caller has to ensure keeps in scope – something apt-ftparchive
actually didn't ensure and relied on copy-on-write behavior instead
which c++11 forbids and hence the new default gcc abi doesn't use it.
Diffstat (limited to 'ftparchive/writer.h')
-rw-r--r-- | ftparchive/writer.h | 45 |
1 files changed, 21 insertions, 24 deletions
diff --git a/ftparchive/writer.h b/ftparchive/writer.h index 226996475..0ba60db5e 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -42,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); @@ -59,10 +59,11 @@ class FTWScanner { c1out << endl; ErrorPrinted = true; - } + } } - + public: + FileFd *Output; unsigned int DoHashes; unsigned long DeLinkLimit; @@ -76,8 +77,8 @@ class FTWScanner void AddPattern(char const *Pattern) { Patterns.push_back(Pattern); }; void AddPatterns(std::vector<std::string> const &patterns) { Patterns.insert(Patterns.end(), patterns.begin(), patterns.end()); }; bool SetExts(string const &Vals); - - FTWScanner(string const &Arch = string()); + + FTWScanner(FileFd * const Output, string const &Arch = string()); virtual ~FTWScanner() {}; }; @@ -86,9 +87,9 @@ class MultiCompress; class TranslationWriter { MultiCompress *Comp; - FILE *Output; std::set<string> Included; unsigned short RefCounter; + FileFd *Output; public: void IncreaseRefCounter() { ++RefCounter; }; @@ -97,7 +98,7 @@ class TranslationWriter 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() : Comp(NULL), RefCounter(0) {}; ~TranslationWriter(); }; @@ -105,7 +106,7 @@ class PackagesWriter : public FTWScanner { Override Over; CacheDB Db; - + public: // Some flags @@ -117,7 +118,6 @@ class PackagesWriter : public FTWScanner // General options string PathPrefix; string DirStrip; - FILE *Output; struct CacheDB::Stats &Stats; TranslationWriter *TransWriter; @@ -126,7 +126,7 @@ class PackagesWriter : public FTWScanner {return Over.ReadExtraOverride(File);}; virtual bool DoPackage(string FileName); - PackagesWriter(string const &DB, + PackagesWriter(FileFd * const Output, string const &DB, string const &Overrides, string const &ExtOverrides = "", string const &Arch = ""); @@ -136,25 +136,24 @@ class PackagesWriter : public FTWScanner 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) {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() {}; }; @@ -165,21 +164,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; virtual bool DoPackage(string FileName); - 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);}; }; @@ -187,11 +185,10 @@ class SourcesWriter : public FTWScanner class ReleaseWriter : public FTWScanner { public: - ReleaseWriter(string const &DB); + ReleaseWriter(FileFd * const Output, string const &DB); virtual bool DoPackage(string FileName); void Finish(); - FILE *Output; // General options string PathPrefix; string DirStrip; |