1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
/* ######################################################################
Debian Source Package Records - Parser implementation for Debian style
source indexes
##################################################################### */
/*}}}*/
#ifndef PKGLIB_DEBSRCRECORDS_H
#define PKGLIB_DEBSRCRECORDS_H
#include <apt-pkg/fileutl.h>
#include <apt-pkg/srcrecords.h>
#include <apt-pkg/tagfile-keys.h>
#include <apt-pkg/tagfile.h>
#include <cstddef>
#include <string>
#include <vector>
class pkgIndexFile;
class APT_HIDDEN debSrcRecordParser : public pkgSrcRecords::Parser
{
/** \brief dpointer placeholder (for later in case we need it) */
void * const d;
protected:
FileFd Fd;
pkgTagFile Tags;
pkgTagSection Sect;
std::vector<const char*> StaticBinList;
unsigned long iOffset;
char *Buffer;
public:
bool Restart() override { return Jump(0); }
bool Step() override {iOffset = Tags.Offset(); return Tags.Step(Sect);}
bool Jump(unsigned long const &Off) override {iOffset = Off; return Tags.Jump(Sect,Off);}
[[nodiscard]] std::string Package() const override;
[[nodiscard]] std::string Version() const override { return std::string{Sect.Find(pkgTagSection::Key::Version)}; }
[[nodiscard]] std::string Maintainer() const override { return std::string{Sect.Find(pkgTagSection::Key::Maintainer)}; }
[[nodiscard]] std::string Section() const override { return std::string{Sect.Find(pkgTagSection::Key::Section)}; }
const char **Binaries() override;
bool BuildDepends(std::vector<BuildDepRec> &BuildDeps, bool const &ArchOnly, bool const &StripMultiArch = true) override;
unsigned long Offset() override { return iOffset; }
std::string AsStr() override
{
const char *Start=0,*Stop=0;
Sect.GetSection(Start,Stop);
return std::string(Start,Stop);
};
bool Files(std::vector<pkgSrcRecords::File> &F) override;
debSrcRecordParser(std::string const &File,pkgIndexFile const *Index);
~debSrcRecordParser() override;
};
class APT_HIDDEN debDscRecordParser : public debSrcRecordParser
{
public:
debDscRecordParser(std::string const &DscFile, pkgIndexFile const *Index);
};
#endif
|