#ifndef WRITER_H
#define WRITER_H
+#include <apt-pkg/hashes.h>
#include <string>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <map>
+#include <set>
+#include <stdlib.h>
+#include <sys/types.h>
+#include "contents.h"
#include "cachedb.h"
#include "override.h"
#include "apt-ftparchive.h"
using std::endl;
using std::vector;
using std::map;
-
+
class FTWScanner
{
protected:
vector<string> 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<std::string> 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<string> 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;
// 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<string,struct CheckSum> CheckSums;
};