summaryrefslogtreecommitdiffstats
path: root/apt-pkg/pkgrecords.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 18:07:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-05 18:07:13 +0000
commit636c7dc17286d93d788c741d15fd756aeda066d5 (patch)
treee7ae158cc54f591041a061b9865bcae51854f15c /apt-pkg/pkgrecords.h
parentInitial commit. (diff)
downloadapt-upstream/1.8.2.3.tar.xz
apt-upstream/1.8.2.3.zip
Adding upstream version 1.8.2.3.upstream/1.8.2.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'apt-pkg/pkgrecords.h')
-rw-r--r--apt-pkg/pkgrecords.h115
1 files changed, 115 insertions, 0 deletions
diff --git a/apt-pkg/pkgrecords.h b/apt-pkg/pkgrecords.h
new file mode 100644
index 0000000..6d1342d
--- /dev/null
+++ b/apt-pkg/pkgrecords.h
@@ -0,0 +1,115 @@
+// -*- mode: cpp; mode: fold -*-
+// Description /*{{{*/
+/* ######################################################################
+
+ Package Records - Allows access to complete package description records
+ directly from the file.
+
+ The package record system abstracts the actual parsing of the
+ package files. This is different than the generators parser in that
+ it is used to access information not generate information. No
+ information touched by the generator should be parable from here as
+ it can always be retrieved directly from the cache.
+
+ ##################################################################### */
+ /*}}}*/
+#ifndef PKGLIB_PKGRECORDS_H
+#define PKGLIB_PKGRECORDS_H
+
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgcache.h>
+
+#include <string>
+#include <vector>
+
+class pkgRecords /*{{{*/
+{
+ public:
+ class Parser;
+
+ private:
+ /** \brief dpointer placeholder (for later in case we need it) */
+ void * const d;
+
+ pkgCache &Cache;
+ std::vector<Parser *>Files;
+
+ public:
+ // Lookup function
+ Parser &Lookup(pkgCache::VerFileIterator const &Ver);
+ Parser &Lookup(pkgCache::DescFileIterator const &Desc);
+
+ // Construct destruct
+ explicit pkgRecords(pkgCache &Cache);
+ virtual ~pkgRecords();
+};
+ /*}}}*/
+class pkgRecords::Parser /*{{{*/
+{
+ protected:
+
+ virtual bool Jump(pkgCache::VerFileIterator const &Ver) = 0;
+ virtual bool Jump(pkgCache::DescFileIterator const &Desc) = 0;
+
+ public:
+ friend class pkgRecords;
+
+ // These refer to the archive file for the Version
+ virtual std::string FileName() {return std::string();};
+ virtual std::string SourcePkg() {return std::string();};
+ virtual std::string SourceVer() {return std::string();};
+
+ /** return all known hashes in this record.
+ *
+ * For authentication proposes packages come with hashsums which
+ * this method is supposed to parse and return so that clients can
+ * choose the hash to be used.
+ */
+ virtual HashStringList Hashes() const { return HashStringList(); };
+ APT_DEPRECATED_MSG("Use .Hashes instead of a hardcoded hash algorithm") std::string MD5Hash() const { return GetHashFromHashes("MD5Sum"); };
+ APT_DEPRECATED_MSG("Use .Hashes instead of a hardcoded hash algorithm") std::string SHA1Hash() const { return GetHashFromHashes("SHA1"); };
+ APT_DEPRECATED_MSG("Use .Hashes instead of a hardcoded hash algorithm") std::string SHA256Hash() const { return GetHashFromHashes("SHA256"); };
+ APT_DEPRECATED_MSG("Use .Hashes instead of a hardcoded hash algorithm") std::string SHA512Hash() const { return GetHashFromHashes("SHA512"); };
+
+ // These are some general stats about the package
+ virtual std::string Maintainer() {return std::string();};
+ /** return short description in language from record.
+ *
+ * @see #LongDesc
+ */
+ virtual std::string ShortDesc(std::string const &/*lang*/) {return std::string();};
+ /** return long description in language from record.
+ *
+ * If \b lang is empty the "best" available language will be
+ * returned as determined by the APT::Languages configuration.
+ * If a (requested) language can't be found in this record an empty
+ * string will be returned.
+ */
+ virtual std::string LongDesc(std::string const &/*lang*/) {return std::string();};
+ std::string ShortDesc() {return ShortDesc("");};
+ std::string LongDesc() {return LongDesc("");};
+
+ virtual std::string Name() {return std::string();};
+ virtual std::string Homepage() {return std::string();}
+
+ // An arbitrary custom field
+ virtual std::string RecordField(const char * /*fieldName*/) { return std::string();};
+
+ // The record in binary form
+ virtual void GetRec(const char *&Start,const char *&Stop) {Start = Stop = 0;};
+
+ Parser();
+ virtual ~Parser();
+
+ private:
+ void * const d;
+ APT_HIDDEN std::string GetHashFromHashes(char const * const type) const
+ {
+ HashStringList const hashes = Hashes();
+ HashString const * const hs = hashes.find(type);
+ return hs != NULL ? hs->HashValue() : "";
+ };
+};
+ /*}}}*/
+#endif