summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2014-11-06 12:53:59 +0100
committerDavid Kalnischkies <david@kalnischkies.de>2014-11-08 14:26:00 +0100
commitf105aaba433f5a8b9c4326dd0d704501bf07d1e5 (patch)
treee614eea939eedd34bfcb37e42c60261d2f654d60 /apt-pkg
parent60b64ffc3468579183abc1bac0179943d782a52e (diff)
better non-virtual metaIndex.LocalFileName() implementation
We can't add a new virtual method without breaking the ABI, but we can freely add new methods, so for older ABIs we just implement this method with a dynamic_cast, so that clients can be more ignorant about the API here and especially don't need to pull a very dirty trick by assuming internal knowledge (like apt-get did here).
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/deb/debmetaindex.cc2
-rw-r--r--apt-pkg/deb/debmetaindex.h3
-rw-r--r--apt-pkg/metaindex.cc40
-rw-r--r--apt-pkg/metaindex.h25
4 files changed, 48 insertions, 22 deletions
diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc
index a6c88b393..d99fd8393 100644
--- a/apt-pkg/deb/debmetaindex.cc
+++ b/apt-pkg/deb/debmetaindex.cc
@@ -78,7 +78,6 @@ string debReleaseIndex::MetaIndexURI(const char *Type) const
return Res;
}
-#if APT_PKG_ABI >= 0x0413
std::string debReleaseIndex::LocalFileName() const
{
// see if we have a InRelease file
@@ -92,7 +91,6 @@ std::string debReleaseIndex::LocalFileName() const
return "";
}
-#endif
string debReleaseIndex::IndexURISuffix(const char *Type, string const &Section, string const &Arch) const
{
diff --git a/apt-pkg/deb/debmetaindex.h b/apt-pkg/deb/debmetaindex.h
index 3d35401ec..4a8e454c7 100644
--- a/apt-pkg/deb/debmetaindex.h
+++ b/apt-pkg/deb/debmetaindex.h
@@ -54,8 +54,9 @@ class debReleaseIndex : public metaIndex {
std::string MetaIndexURI(const char *Type) const;
#if APT_PKG_ABI >= 413
- virtual std::string LocalFileName() const;
+ virtual
#endif
+ std::string LocalFileName() const;
std::string IndexURI(const char *Type, std::string const &Section, std::string const &Arch="native") const;
std::string IndexURISuffix(const char *Type, std::string const &Section, std::string const &Arch="native") const;
diff --git a/apt-pkg/metaindex.cc b/apt-pkg/metaindex.cc
new file mode 100644
index 000000000..31a8ec009
--- /dev/null
+++ b/apt-pkg/metaindex.cc
@@ -0,0 +1,40 @@
+// Include Files /*{{{*/
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/metaindex.h>
+
+#include <stddef.h>
+
+#include <string>
+#include <vector>
+ /*}}}*/
+
+#if (APT_PKG_MAJOR >= 4 && APT_PKG_MINOR >= 13)
+std::string metaIndex::LocalFileName() const { return ""; }
+#else
+#include <apt-pkg/debmetaindex.h>
+std::string metaIndex::LocalFileName() const
+{
+ debReleaseIndex const * deb = dynamic_cast<debReleaseIndex const*>(this);
+ if (deb != NULL)
+ return deb->LocalFileName();
+
+ return "";
+}
+#endif
+
+metaIndex::metaIndex(std::string const &URI, std::string const &Dist,
+ char const * const Type)
+: Indexes(NULL), Type(Type), URI(URI), Dist(Dist), Trusted(false)
+{
+ /* nothing */
+}
+
+metaIndex::~metaIndex()
+{
+ if (Indexes == 0)
+ return;
+ for (std::vector<pkgIndexFile *>::iterator I = (*Indexes).begin();
+ I != (*Indexes).end(); ++I)
+ delete *I;
+ delete Indexes;
+}
diff --git a/apt-pkg/metaindex.h b/apt-pkg/metaindex.h
index ae73c27dd..6c3d2880b 100644
--- a/apt-pkg/metaindex.h
+++ b/apt-pkg/metaindex.h
@@ -41,8 +41,8 @@ class metaIndex
// interface to to query it
#if APT_PKG_ABI >= 413
- // returns the path of the local file (or "" if its not available)
- virtual std::string LocalFileName() const {return "";};
+ /** \return the path of the local file (or "" if its not available) */
+ virtual std::string LocalFileName() const;
#else
std::string LocalFileName() const;
#endif
@@ -50,25 +50,12 @@ class metaIndex
// Interface for acquire
virtual std::string ArchiveURI(std::string const& File) const = 0;
virtual bool GetIndexes(pkgAcquire *Owner, bool const &GetAll=false) const = 0;
- virtual std::vector<pkgIndexFile *> *GetIndexFiles() = 0;
+ virtual std::vector<pkgIndexFile *> *GetIndexFiles() = 0;
virtual bool IsTrusted() const = 0;
- metaIndex(std::string const &URI, std::string const &Dist,
- char const * const Type)
- : Indexes(NULL), Type(Type), URI(URI), Dist(Dist), Trusted(false)
- {
- /* nothing */
- }
-
- virtual ~metaIndex()
- {
- if (Indexes == 0)
- return;
- for (std::vector<pkgIndexFile *>::iterator I = (*Indexes).begin();
- I != (*Indexes).end(); ++I)
- delete *I;
- delete Indexes;
- }
+ metaIndex(std::string const &URI, std::string const &Dist,
+ char const * const Type);
+ virtual ~metaIndex();
};
#endif