summaryrefslogtreecommitdiff
path: root/ftparchive/writer.h
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2015-05-11 15:08:08 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2015-05-11 17:22:33 +0200
commit88593886a42025d51d76051da5929b044e42efee (patch)
tree6212ec08e3ac872573ca5faefb400a7914051bee /ftparchive/writer.h
parent8d058ea53b18348f81229049a27d14282bd8d8c1 (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.h45
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;