summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/acquire-item.cc45
-rw-r--r--apt-pkg/acquire.cc4
-rw-r--r--apt-pkg/aptconfiguration.h10
-rw-r--r--apt-pkg/cachefile.cc23
-rw-r--r--apt-pkg/cachefile.h3
-rw-r--r--apt-pkg/cacheset.h2
-rw-r--r--apt-pkg/contrib/fileutl.cc3
-rw-r--r--apt-pkg/deb/debmetaindex.cc1
-rw-r--r--apt-pkg/deb/dpkgpm.cc105
-rw-r--r--apt-pkg/depcache.cc2
-rw-r--r--apt-pkg/init.cc4
-rw-r--r--apt-pkg/orderlist.cc4
-rw-r--r--apt-pkg/tagfile.h2
13 files changed, 123 insertions, 85 deletions
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc
index b40c67ec1..83c793093 100644
--- a/apt-pkg/acquire-item.cc
+++ b/apt-pkg/acquire-item.cc
@@ -277,6 +277,27 @@ static HashStringList GetExpectedHashesFromFor(metaIndex * const Parser, std::st
}
/*}}}*/
+class pkgAcquire::Item::Private /*{{{*/
+{
+public:
+ struct AlternateURI
+ {
+ std::string URI;
+ std::unordered_map<std::string, std::string> changefields;
+ AlternateURI(std::string &&u, decltype(changefields) &&cf) : URI(u), changefields(cf) {}
+ };
+ std::list<AlternateURI> AlternativeURIs;
+ std::vector<std::string> BadAlternativeSites;
+ std::vector<std::string> PastRedirections;
+ std::unordered_map<std::string, std::string> CustomFields;
+ unsigned int Retries;
+
+ Private() : Retries(_config->FindI("Acquire::Retries", 0))
+ {
+ }
+};
+ /*}}}*/
+
// all ::HashesRequired and ::GetExpectedHashes implementations /*{{{*/
/* ::GetExpectedHashes is abstract and has to be implemented by all subclasses.
It is best to implement it as broadly as possible, while ::HashesRequired defaults
@@ -748,25 +769,6 @@ class APT_HIDDEN CleanupItem : public pkgAcqTransactionItem /*{{{*/
/*}}}*/
// Acquire::Item::Item - Constructor /*{{{*/
-class pkgAcquire::Item::Private
-{
-public:
- struct AlternateURI
- {
- std::string URI;
- std::unordered_map<std::string, std::string> changefields;
- AlternateURI(std::string &&u, decltype(changefields) &&cf) : URI(u), changefields(cf) {}
- };
- std::list<AlternateURI> AlternativeURIs;
- std::vector<std::string> BadAlternativeSites;
- std::vector<std::string> PastRedirections;
- std::unordered_map<std::string, std::string> CustomFields;
- unsigned int Retries;
-
- Private() : Retries(_config->FindI("Acquire::Retries", 0))
- {
- }
-};
APT_IGNORE_DEPRECATED_PUSH
pkgAcquire::Item::Item(pkgAcquire * const owner) :
FileSize(0), PartialSize(0), Mode(0), ID(0), Complete(false), Local(false),
@@ -1045,7 +1047,7 @@ void pkgAcquire::Item::Done(string const &/*Message*/, HashStringList const &Has
}
Status = StatDone;
ErrorText.clear();
- Owner->Dequeue(this);
+ Dequeue();
}
/*}}}*/
// Acquire::Item::Rename - Rename a file /*{{{*/
@@ -1070,6 +1072,7 @@ bool pkgAcquire::Item::Rename(string const &From,string const &To)
/*}}}*/
void pkgAcquire::Item::Dequeue() /*{{{*/
{
+ d->AlternativeURIs.clear();
Owner->Dequeue(this);
}
/*}}}*/
@@ -1272,7 +1275,7 @@ void pkgAcqMetaBase::AbortTransaction()
{
(*I)->ExpectedAdditionalItems = 0;
if ((*I)->Status != pkgAcquire::Item::StatFetching)
- Owner->Dequeue(*I);
+ (*I)->Dequeue();
(*I)->TransactionState(TransactionAbort);
}
Transaction.clear();
diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc
index 0fee80c5d..541785b03 100644
--- a/apt-pkg/acquire.cc
+++ b/apt-pkg/acquire.cc
@@ -1329,7 +1329,7 @@ bool pkgAcquireStatus::Pulse(pkgAcquire *Owner)
{
std::chrono::duration<double> Delta =
std::chrono::seconds(NewTime.tv_sec - Time.tv_sec) +
- std::chrono::microseconds(NewTime.tv_sec - Time.tv_usec);
+ std::chrono::microseconds(NewTime.tv_usec - Time.tv_usec);
// Compute the CPS value
if (Delta < std::chrono::milliseconds(10))
@@ -1423,7 +1423,7 @@ void pkgAcquireStatus::Stop()
std::chrono::duration<double> Delta =
std::chrono::seconds(NewTime.tv_sec - StartTime.tv_sec) +
- std::chrono::microseconds(NewTime.tv_sec - StartTime.tv_usec);
+ std::chrono::microseconds(NewTime.tv_usec - StartTime.tv_usec);
// Compute the CPS value
if (Delta < std::chrono::milliseconds(10))
diff --git a/apt-pkg/aptconfiguration.h b/apt-pkg/aptconfiguration.h
index 6776f96ef..34621a2b8 100644
--- a/apt-pkg/aptconfiguration.h
+++ b/apt-pkg/aptconfiguration.h
@@ -34,7 +34,7 @@ namespace Configuration { /*{{{*/
* in the Dir::Bin group.
*
* \param Cached saves the result so we need to calculated it only once
- * this parameter should ony be used for testing purposes.
+ * this parameter should only be used for testing purposes.
*
* \return a vector of the compression types in the preferred usage order
*/
@@ -57,9 +57,9 @@ namespace Configuration { /*{{{*/
*
* \param All return all codes or only codes for languages we want to use
* \param Cached saves the result so we need to calculated it only once
- * this parameter should ony be used for testing purposes.
+ * this parameter should only be used for testing purposes.
* \param Locale don't get the locale from the system but use this one instead
- * this parameter should ony be used for testing purposes.
+ * this parameter should only be used for testing purposes.
*
* \return a vector of (all) Language Codes in the preferred usage order
*/
@@ -77,7 +77,7 @@ namespace Configuration { /*{{{*/
/** \brief Returns a vector of Architectures we support
*
* \param Cached saves the result so we need to calculated it only once
- * this parameter should ony be used for testing purposes.
+ * this parameter should only be used for testing purposes.
*
* \return a vector of Architectures in preferred order
*/
@@ -108,7 +108,7 @@ namespace Configuration { /*{{{*/
/** \brief Return a vector of Compressors supported for data.tar's
*
* \param Cached saves the result so we need to calculated it only once
- * this parameter should ony be used for testing purposes.
+ * this parameter should only be used for testing purposes.
*
* \return a vector of Compressors
*/
diff --git a/apt-pkg/cachefile.cc b/apt-pkg/cachefile.cc
index a22804c36..9a1a6cfa9 100644
--- a/apt-pkg/cachefile.cc
+++ b/apt-pkg/cachefile.cc
@@ -35,12 +35,18 @@
#include <apti18n.h>
/*}}}*/
+
+struct pkgCacheFile::Private
+{
+ bool WithLock = false;
+};
+
// CacheFile::CacheFile - Constructor /*{{{*/
-pkgCacheFile::pkgCacheFile() : d(NULL), ExternOwner(false), Map(NULL), Cache(NULL),
+pkgCacheFile::pkgCacheFile() : d(new Private()), ExternOwner(false), Map(NULL), Cache(NULL),
DCache(NULL), SrcList(NULL), Policy(NULL)
{
}
-pkgCacheFile::pkgCacheFile(pkgDepCache * const Owner) : d(NULL), ExternOwner(true),
+pkgCacheFile::pkgCacheFile(pkgDepCache * const Owner) : d(new Private()), ExternOwner(true),
Map(&Owner->GetCache().GetMap()), Cache(&Owner->GetCache()),
DCache(Owner), SrcList(NULL), Policy(NULL)
{
@@ -59,8 +65,10 @@ pkgCacheFile::~pkgCacheFile()
}
delete Policy;
delete SrcList;
- if (ExternOwner == false)
+ if (d->WithLock == true)
_system->UnLock(true);
+
+ delete d;
}
/*}}}*/
// CacheFile::BuildCaches - Open and build the cache files /*{{{*/
@@ -97,8 +105,11 @@ bool pkgCacheFile::BuildCaches(OpProgress *Progress, bool WithLock)
}
if (WithLock == true)
+ {
if (_system->Lock() == false)
return false;
+ d->WithLock = true;
+ }
if (_error->PendingError() == true)
return false;
@@ -337,7 +348,11 @@ void pkgCacheFile::Close()
ExternOwner = false;
delete Policy;
delete SrcList;
- _system->UnLock(true);
+ if (d->WithLock == true)
+ {
+ _system->UnLock(true);
+ d->WithLock = false;
+ }
Map = NULL;
DCache = NULL;
diff --git a/apt-pkg/cachefile.h b/apt-pkg/cachefile.h
index 097876b3a..ed5d5c57c 100644
--- a/apt-pkg/cachefile.h
+++ b/apt-pkg/cachefile.h
@@ -36,8 +36,9 @@ class OpProgress;
class pkgCacheFile
{
+ struct Private;
/** \brief dpointer placeholder (for later in case we need it) */
- void * const d;
+ Private *const d;
bool ExternOwner;
protected:
diff --git a/apt-pkg/cacheset.h b/apt-pkg/cacheset.h
index 157f6139e..b00fc7318 100644
--- a/apt-pkg/cacheset.h
+++ b/apt-pkg/cacheset.h
@@ -479,7 +479,7 @@ APT_IGNORE_DEPRECATED_POP
return FromTask(Cache, pattern, helper);
}
- /** \brief returns all packages in the cache whose name matchs a given pattern
+ /** \brief returns all packages in the cache whose name matches a given pattern
A simple helper responsible for executing a regular expression on all
package names in the cache. Optional it prints a notice about the
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
index 85d7b36c7..eab05de4f 100644
--- a/apt-pkg/contrib/fileutl.cc
+++ b/apt-pkg/contrib/fileutl.cc
@@ -24,6 +24,7 @@
#include <apt-pkg/error.h>
#include <apt-pkg/fileutl.h>
#include <apt-pkg/macros.h>
+#include <apt-pkg/pkgsystem.h>
#include <apt-pkg/sptr.h>
#include <apt-pkg/strutl.h>
@@ -101,6 +102,8 @@ bool RunScripts(const char *Cnf)
// This is the child
if (Child == 0)
{
+ if (_system != nullptr && _system->IsLocked() == true && (stringcasecmp(Cnf, "dpkg::post-invoke") == 0 || stringcasecmp(Cnf, "dpkg::pre-invoke") == 0))
+ setenv("DPKG_FRONTEND_LOCKED", "true", 1);
if (_config->FindDir("DPkg::Chroot-Directory","/") != "/")
{
std::cerr << "Chrooting into "
diff --git a/apt-pkg/deb/debmetaindex.cc b/apt-pkg/deb/debmetaindex.cc
index 6cbed85a7..9c7c70784 100644
--- a/apt-pkg/deb/debmetaindex.cc
+++ b/apt-pkg/deb/debmetaindex.cc
@@ -1043,6 +1043,7 @@ class APT_HIDDEN debSLTypeDebian : public pkgSourceList::Type /*{{{*/
auto const tv = *t;
mytargets.erase(t);
mytargets.emplace_back(tv);
+ break;
}
if (Changed == false)
break;
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 790019b98..074e52b3f 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -102,8 +102,8 @@ APT_PURE static unsigned int EnvironmentSize() /*{{{*/
class pkgDPkgPMPrivate /*{{{*/
{
public:
- pkgDPkgPMPrivate() : stdin_is_dev_null(false), dpkgbuf_pos(0),
- term_out(NULL), history_out(NULL),
+ pkgDPkgPMPrivate() : stdin_is_dev_null(false), status_fd_reached_end_of_file(false),
+ dpkgbuf_pos(0), term_out(NULL), history_out(NULL),
progress(NULL), tt_is_valid(false), master(-1),
slave(NULL), protect_slave_from_dying(-1),
direct_stdin(false)
@@ -114,6 +114,7 @@ public:
{
}
bool stdin_is_dev_null;
+ bool status_fd_reached_end_of_file;
// the buffer we use for the dpkg status-fd reading
char dpkgbuf[1024];
size_t dpkgbuf_pos;
@@ -141,12 +142,12 @@ namespace
// Maps the dpkg "processing" info to human readable names. Entry 0
// of each array is the key, entry 1 is the value.
const std::pair<const char *, const char *> PackageProcessingOps[] = {
- std::make_pair("install", N_("Installing %s")),
+ std::make_pair("install", N_("Preparing %s")),
// we don't care for the difference
- std::make_pair("upgrade", N_("Installing %s")),
- std::make_pair("configure", N_("Configuring %s")),
- std::make_pair("remove", N_("Removing %s")),
- std::make_pair("purge", N_("Completely removing %s")),
+ std::make_pair("upgrade", N_("Preparing %s")),
+ std::make_pair("configure", N_("Preparing to configure %s")),
+ std::make_pair("remove", N_("Preparing for removal of %s")),
+ std::make_pair("purge", N_("Preparing to completely remove %s")),
std::make_pair("disappear", N_("Noting disappearance of %s")),
std::make_pair("trigproc", N_("Running post-installation trigger %s"))
};
@@ -480,6 +481,9 @@ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf)
strprintf(hookfd, "%d", InfoFD);
setenv("APT_HOOK_INFO_FD", hookfd.c_str(), 1);
+ if (_system != nullptr && _system->IsLocked() == true && stringcasecmp(Cnf, "DPkg::Pre-Install-Pkgs") == 0)
+ setenv("DPKG_FRONTEND_LOCKED", "true", 1);
+
debSystem::DpkgChrootDirectory();
const char *Args[4];
Args[0] = "/bin/sh";
@@ -958,11 +962,19 @@ void pkgDPkgPM::handleCrossUpgradeAction(string const &pkgname) /*{{{*/
// DPkgPM::DoDpkgStatusFd /*{{{*/
void pkgDPkgPM::DoDpkgStatusFd(int statusfd)
{
- ssize_t const len = read(statusfd, &d->dpkgbuf[d->dpkgbuf_pos],
- (sizeof(d->dpkgbuf)/sizeof(d->dpkgbuf[0])) - d->dpkgbuf_pos);
- if(len <= 0)
- return;
- d->dpkgbuf_pos += (len / sizeof(d->dpkgbuf[0]));
+ auto const remainingBuffer = (sizeof(d->dpkgbuf) / sizeof(d->dpkgbuf[0])) - d->dpkgbuf_pos;
+ if (likely(remainingBuffer > 0) && d->status_fd_reached_end_of_file == false)
+ {
+ auto const len = read(statusfd, &d->dpkgbuf[d->dpkgbuf_pos], remainingBuffer);
+ if (len < 0)
+ return;
+ else if (len == 0 && d->dpkgbuf_pos == 0)
+ {
+ d->status_fd_reached_end_of_file = true;
+ return;
+ }
+ d->dpkgbuf_pos += (len / sizeof(d->dpkgbuf[0]));
+ }
// process line by line from the buffer
char *p = d->dpkgbuf, *q = nullptr;
@@ -1145,30 +1157,26 @@ void pkgDPkgPM::BuildPackagesProgressMap()
{
// map the dpkg states to the operations that are performed
// (this is sorted in the same way as Item::Ops)
- static const std::array<std::array<DpkgState, 3>, 4> DpkgStatesOpMap = {{
+ static const std::array<std::array<DpkgState, 2>, 4> DpkgStatesOpMap = {{
// Install operation
{{
- {"half-installed", N_("Preparing %s")},
- {"unpacked", N_("Unpacking %s") },
- {nullptr, nullptr}
+ {"half-installed", N_("Unpacking %s")},
+ {"unpacked", N_("Installing %s") },
}},
// Configure operation
{{
- {"unpacked",N_("Preparing to configure %s") },
{"half-configured", N_("Configuring %s") },
{ "installed", N_("Installed %s")},
}},
// Remove operation
{{
- {"half-configured", N_("Preparing for removal of %s")},
+ {"half-configured", N_("Removing %s")},
{"half-installed", N_("Removing %s")},
- {"config-files", N_("Removed %s")},
}},
// Purge operation
{{
- {"config-files", N_("Preparing to completely remove %s")},
+ {"config-files", N_("Completely removing %s")},
{"not-installed", N_("Completely removed %s")},
- {nullptr, nullptr}
}},
}};
static_assert(Item::Purge == 3, "Enum item has unexpected index for mapping array");
@@ -1184,21 +1192,16 @@ void pkgDPkgPM::BuildPackagesProgressMap()
string const name = I.Pkg.FullName();
PackageOpsDone[name] = 0;
- auto AddToPackageOps = std::back_inserter(PackageOps[name]);
- if (I.Op == Item::Purge && I.Pkg->CurrentVer != 0)
- {
- // purging a package which is installed first passes through remove states
- auto const DpkgOps = DpkgStatesOpMap[Item::Remove];
- std::copy(DpkgOps.begin(), DpkgOps.end(), AddToPackageOps);
+ auto AddToPackageOps = [&](decltype(I.Op) const Op) {
+ auto const DpkgOps = DpkgStatesOpMap[Op];
+ std::copy(DpkgOps.begin(), DpkgOps.end(), std::back_inserter(PackageOps[name]));
PackagesTotal += DpkgOps.size();
- }
- auto const DpkgOps = DpkgStatesOpMap[I.Op];
- std::copy_if(DpkgOps.begin(), DpkgOps.end(), AddToPackageOps, [&](DpkgState const &state) {
- if (state.state == nullptr)
- return false;
- ++PackagesTotal;
- return true;
- });
+ };
+ // purging a package which is installed first passes through remove states
+ if (I.Op == Item::Purge && I.Pkg->CurrentVer != 0)
+ AddToPackageOps(Item::Remove);
+ AddToPackageOps(I.Op);
+
if ((I.Op == Item::Remove || I.Op == Item::Purge) && I.Pkg->CurrentVer != 0)
{
if (I.Pkg->CurrentState == pkgCache::State::UnPacked ||
@@ -1622,9 +1625,9 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
approvedStates.Remove(*Ver);
Purges.erase(Ver);
auto && RemOp = PackageOps[C.first->Pkg.FullName()];
- if (RemOp.size() == 5)
+ if (RemOp.size() == 4)
{
- RemOp.erase(std::next(RemOp.begin(), 3), RemOp.end());
+ RemOp.erase(std::next(RemOp.begin(), 2), RemOp.end());
PackagesTotal -= 2;
}
else
@@ -2022,6 +2025,7 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
// we read from dpkg here
int const _dpkgin = fd[0];
close(fd[1]); // close the write end of the pipe
+ d->status_fd_reached_end_of_file = false;
// apply ionice
if (_config->FindB("DPkg::UseIoNice", false) == true)
@@ -2041,14 +2045,24 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
int Status = 0;
int res;
bool waitpid_failure = false;
- while ((res=waitpid(Child,&Status, WNOHANG)) != Child) {
- if(res < 0) {
- // error handling, waitpid returned -1
- if (errno == EINTR)
- continue;
- waitpid_failure = true;
- break;
+ bool dpkg_finished = false;
+ do
+ {
+ if (dpkg_finished == false)
+ {
+ if ((res = waitpid(Child, &Status, WNOHANG)) == Child)
+ dpkg_finished = true;
+ else if (res < 0)
+ {
+ // error handling, waitpid returned -1
+ if (errno == EINTR)
+ continue;
+ waitpid_failure = true;
+ break;
+ }
}
+ if (dpkg_finished && d->status_fd_reached_end_of_file)
+ break;
// wait for input or output here
FD_ZERO(&rfds);
@@ -2078,7 +2092,8 @@ bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
DoStdin(d->master);
if(FD_ISSET(_dpkgin, &rfds))
DoDpkgStatusFd(_dpkgin);
- }
+
+ } while (true);
close(_dpkgin);
// Restore sig int/quit
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index 7c016a5e7..510f2d3f0 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -413,7 +413,7 @@ bool pkgDepCache::CheckDep(DepIterator const &Dep,int const Type,PkgIterator &Re
/*}}}*/
// DepCache::AddSizes - Add the packages sizes to the counters /*{{{*/
// ---------------------------------------------------------------------
-/* Call with Inverse = true to perform the inverse opration */
+/* Call with Inverse = true to perform the inverse operation */
void pkgDepCache::AddSizes(const PkgIterator &Pkg, bool const Inverse)
{
StateCache &P = PkgState[Pkg->ID];
diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc
index 22693d2a2..9a51e31e7 100644
--- a/apt-pkg/init.cc
+++ b/apt-pkg/init.cc
@@ -204,7 +204,7 @@ bool pkgInitConfig(Configuration &Cnf)
Cnf.CndSet("Acquire::IndexTargets::deb-src::Sources::flatDescription", "$(RELEASE) Sources");
Cnf.CndSet("Acquire::IndexTargets::deb-src::Sources::Optional", false);
- Cnf.CndSet("Acquire::Changelogs::URI::Origin::Debian", "http://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog");
+ Cnf.CndSet("Acquire::Changelogs::URI::Origin::Debian", "https://metadata.ftp-master.debian.org/changelogs/@CHANGEPATH@_changelog");
Cnf.CndSet("Acquire::Changelogs::URI::Origin::Tanglu", "http://metadata.tanglu.org/changelogs/@CHANGEPATH@_changelog");
Cnf.CndSet("Acquire::Changelogs::URI::Origin::Ubuntu", "https://changelogs.ubuntu.com/changelogs/pool/@CHANGEPATH@/changelog");
Cnf.CndSet("Acquire::Changelogs::URI::Origin::Ultimedia", "http://packages.ultimediaos.com/changelogs/pool/@CHANGEPATH@/changelog.txt");
@@ -249,7 +249,7 @@ bool pkgInitConfig(Configuration &Cnf)
return good;
}
/*}}}*/
-// pkgInitSystem - Initialize the _system calss /*{{{*/
+// pkgInitSystem - Initialize the _system class /*{{{*/
// ---------------------------------------------------------------------
/* */
bool pkgInitSystem(Configuration &Cnf,pkgSystem *&Sys)
diff --git a/apt-pkg/orderlist.cc b/apt-pkg/orderlist.cc
index 670b5e2bd..a826f2853 100644
--- a/apt-pkg/orderlist.cc
+++ b/apt-pkg/orderlist.cc
@@ -12,7 +12,7 @@
This is a modified version of Manoj's Routine B. It consists of four
independent ordering algorithms that can be applied at for different
- points in the ordering. By appling progressivly fewer ordering
+ points in the ordering. By applying progressivly fewer ordering
operations it is possible to give each consideration it's own
priority and create an order that satisfies the lowest applicable
consideration.
@@ -562,7 +562,7 @@ bool pkgOrderList::VisitProvides(DepIterator D,bool Critical)
// OrderList::VisitNode - Recursive ordering director /*{{{*/
// ---------------------------------------------------------------------
/* This is the core ordering routine. It calls the set dependency
- consideration functions which then potentialy call this again. Finite
+ consideration functions which then potentially call this again. Finite
depth is achieved through the colouring mechinism. */
bool pkgOrderList::VisitNode(PkgIterator Pkg, char const* from)
{
diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h
index c4dc50a10..8b59c43de 100644
--- a/apt-pkg/tagfile.h
+++ b/apt-pkg/tagfile.h
@@ -133,7 +133,7 @@ class pkgTagSection
* @param MaxLength is the size of valid data in the stream pointed to by Start
* @param Restart if enabled internal state will be cleared, otherwise it is
* assumed that now more data is available in the stream and the parsing will
- * start were it encountered insufficent data the last time.
+ * start were it encountered insufficient data the last time.
*
* @return \b true if section end was found, \b false otherwise.
* Beware that internal state will be inconsistent if \b false is returned!