summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2010-05-06 16:15:53 +0200
committerDavid Kalnischkies <kalnischkies@gmail.com>2010-05-06 16:15:53 +0200
commitd1aa91622b3e0f7653889cab205e4c5c622162f4 (patch)
tree2daa36375c215c86df9b98c435d7899402748287 /apt-pkg
parent2d847a5919828ab26dd3f3c5993497b95df9051b (diff)
parentd7087c493bf2fc7a0eaf6fa308c496c81e6dc98f (diff)
merge with debian-experimental-ma
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/acquire-item.h3
-rw-r--r--apt-pkg/acquire-worker.h3
-rw-r--r--apt-pkg/acquire.h3
-rw-r--r--apt-pkg/contrib/weakptr.h62
-rw-r--r--apt-pkg/deb/debrecords.cc3
-rw-r--r--apt-pkg/makefile2
6 files changed, 71 insertions, 5 deletions
diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h
index bafa8263a..b338b2a41 100644
--- a/apt-pkg/acquire-item.h
+++ b/apt-pkg/acquire-item.h
@@ -27,6 +27,7 @@
#include <apt-pkg/pkgrecords.h>
#include <apt-pkg/indexrecords.h>
#include <apt-pkg/hashes.h>
+#include <apt-pkg/weakptr.h>
/** \addtogroup acquire
* @{
@@ -46,7 +47,7 @@
*
* \see pkgAcquire
*/
-class pkgAcquire::Item
+class pkgAcquire::Item : public WeakPointable
{
protected:
diff --git a/apt-pkg/acquire-worker.h b/apt-pkg/acquire-worker.h
index 2942df69f..06283922e 100644
--- a/apt-pkg/acquire-worker.h
+++ b/apt-pkg/acquire-worker.h
@@ -20,6 +20,7 @@
#define PKGLIB_ACQUIRE_WORKER_H
#include <apt-pkg/acquire.h>
+#include <apt-pkg/weakptr.h>
/** \brief A fetch subprocess.
@@ -41,7 +42,7 @@
*
* \sa pkgAcqMethod, pkgAcquire::Item, pkgAcquire
*/
-class pkgAcquire::Worker
+class pkgAcquire::Worker : public WeakPointable
{
friend class pkgAcquire;
diff --git a/apt-pkg/acquire.h b/apt-pkg/acquire.h
index 9e91a9f67..8e2c21151 100644
--- a/apt-pkg/acquire.h
+++ b/apt-pkg/acquire.h
@@ -67,6 +67,7 @@
#define PKGLIB_ACQUIRE_H
#include <apt-pkg/macros.h>
+#include <apt-pkg/weakptr.h>
#include <vector>
#include <string>
@@ -376,7 +377,7 @@ class pkgAcquire
*
* An item may have several assocated ItemDescs over its lifetime.
*/
-struct pkgAcquire::ItemDesc
+struct pkgAcquire::ItemDesc : public WeakPointable
{
/** \brief The URI from which to download this item. */
string URI;
diff --git a/apt-pkg/contrib/weakptr.h b/apt-pkg/contrib/weakptr.h
new file mode 100644
index 000000000..5158e393c
--- /dev/null
+++ b/apt-pkg/contrib/weakptr.h
@@ -0,0 +1,62 @@
+/* weakptr.h - An object which supports weak pointers.
+ *
+ * Copyright (C) 2010 Julian Andres Klode <jak@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef WEAK_POINTER_H
+#define WEAK_POINTER_H
+
+#include <set>
+/**
+ * Class for objects providing support for weak pointers.
+ *
+ * This class allows for the registration of certain pointers as weak,
+ * which will cause them to be set to NULL when the destructor of the
+ * object is called.
+ */
+class WeakPointable {
+private:
+ std::set<WeakPointable**> pointers;
+
+public:
+
+ /**
+ * Add a new weak pointer.
+ */
+ inline void AddWeakPointer(WeakPointable** weakptr) {
+ pointers.insert(weakptr);
+ }
+
+ /**
+ * Remove the weak pointer from the list of weak pointers.
+ */
+ inline void RemoveWeakPointer(WeakPointable **weakptr) {
+ pointers.erase(weakptr);
+ }
+
+ /**
+ * Deconstruct the object, set all weak pointers to NULL.
+ */
+ ~WeakPointable() {
+ std::set<WeakPointable**>::iterator iter = pointers.begin();
+ while (iter != pointers.end())
+ **(iter++) = NULL;
+ }
+};
+
+#endif // WEAK_POINTER_H
diff --git a/apt-pkg/deb/debrecords.cc b/apt-pkg/deb/debrecords.cc
index 5b8538a46..34ef0d8f2 100644
--- a/apt-pkg/deb/debrecords.cc
+++ b/apt-pkg/deb/debrecords.cc
@@ -20,7 +20,8 @@
/* */
debRecordParser::debRecordParser(string FileName,pkgCache &Cache) :
File(FileName,FileFd::ReadOnly),
- Tags(&File,Cache.Head().MaxVerFileSize + 200)
+ Tags(&File, std::max(Cache.Head().MaxVerFileSize,
+ Cache.Head().MaxDescFileSize) + 200)
{
}
/*}}}*/
diff --git a/apt-pkg/makefile b/apt-pkg/makefile
index bdd49c089..148ad581b 100644
--- a/apt-pkg/makefile
+++ b/apt-pkg/makefile
@@ -25,7 +25,7 @@ SOURCE = contrib/mmap.cc contrib/error.cc contrib/strutl.cc \
contrib/fileutl.cc
HEADERS = mmap.h error.h configuration.h fileutl.h cmndline.h netrc.h\
md5.h crc-16.h cdromutl.h strutl.h sptr.h sha1.h sha256.h hashes.h \
- macros.h
+ macros.h weakptr.h
# Source code for the core main library
SOURCE+= pkgcache.cc version.cc depcache.cc \