[Aptitude-svn-commit] r4011 - in branches/aptitude-0.3/aptitude: .
src/generic
Daniel Burrows
dburrows at costa.debian.org
Wed Aug 31 16:49:54 UTC 2005
Author: dburrows
Date: Wed Aug 31 16:49:52 2005
New Revision: 4011
Modified:
branches/aptitude-0.3/aptitude/ChangeLog
branches/aptitude-0.3/aptitude/src/generic/apt.cc
branches/aptitude-0.3/aptitude/src/generic/apt.h
branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver_universe.h
Log:
Don't crash if dependency problems exist on startup.
Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog (original)
+++ branches/aptitude-0.3/aptitude/ChangeLog Wed Aug 31 16:49:52 2005
@@ -1,5 +1,10 @@
2005-08-31 Daniel Burrows <dburrows at debian.org>
+ * src/generic/aptitude_resolver_universe.h, src/generic/apt.cc, src/generic/apt.h:
+
+ Pass the package cache into surrounding_or when calling it
+ before apt_cache_file is initialized, to avoid crashes.
+
* src/generic/apt.h:
Add a const qualifier that might not matter but that certainly
Modified: branches/aptitude-0.3/aptitude/src/generic/apt.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/apt.cc (original)
+++ branches/aptitude-0.3/aptitude/src/generic/apt.cc Wed Aug 31 16:49:52 2005
@@ -407,12 +407,16 @@
void surrounding_or(pkgCache::DepIterator dep,
pkgCache::DepIterator &start,
- pkgCache::DepIterator &end)
+ pkgCache::DepIterator &end,
+ pkgCache *cache)
{
+ if(cache == NULL)
+ cache = *apt_cache_file;
+
if(cached_surrounding_or == NULL)
{
- cached_surrounding_or = new pkgCache::Dependency *[(*apt_cache_file)->Head().DependsCount];
- for(unsigned long i = 0; i<(*apt_cache_file)->Head().DependsCount; ++i)
+ cached_surrounding_or = new pkgCache::Dependency *[cache->Head().DependsCount];
+ for(unsigned long i = 0; i<cache->Head().DependsCount; ++i)
cached_surrounding_or[i] = 0;
}
@@ -425,7 +429,7 @@
pkgCache::Dependency *unmunged
= (pkgCache::Dependency *) (((unsigned long) s) & ~0x1UL);
- start = pkgCache::DepIterator(*apt_cache_file, unmunged);
+ start = pkgCache::DepIterator(*cache, unmunged);
end = start;
while(end->CompareOp & pkgCache::Dep::Or)
@@ -651,12 +655,13 @@
* subsuming element in the OR group containing d1.
*/
static bool or_group_subsumes(const pkgCache::DepIterator &d1,
- const pkgCache::DepIterator &d2)
+ const pkgCache::DepIterator &d2,
+ pkgCache *cache)
{
pkgCache::DepIterator start1, end1, start2, end2;
- surrounding_or(d1, start1, end1);
- surrounding_or(d2, start2, end2);
+ surrounding_or(d1, start1, end1, cache);
+ surrounding_or(d2, start2, end2, cache);
for(pkgCache::DepIterator i = start1; i != end1; ++i)
{
@@ -728,7 +733,8 @@
while(!d2.end())
{
if(d2->Type == pkgCache::Dep::Recommends &&
- or_group_subsumes(d2, d) || or_group_subsumes(d, d2))
+ or_group_subsumes(d2, d, &cache->GetCache()) ||
+ or_group_subsumes(d, d2, &cache->GetCache()))
{
pkgCache::DepIterator dtmp = d;
while(!dtmp.end() && dtmp->CompareOp & pkgCache::Dep::Or)
@@ -766,7 +772,7 @@
case uncached:
{
pkgCache::DepIterator start, end;
- surrounding_or(d, start, end);
+ surrounding_or(d, start, end, &cache->GetCache());
bool rval = internal_is_interesting_dep(start, cache);
Modified: branches/aptitude-0.3/aptitude/src/generic/apt.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/apt.h (original)
+++ branches/aptitude-0.3/aptitude/src/generic/apt.h Wed Aug 31 16:49:52 2005
@@ -135,10 +135,13 @@
/** Finds the OR group enclosing the given (forward or reverse) dependency.
*
* The range [start,end) is the OR group when this terminates.
+ * \param cache the cache file in which to operate, or \b NULL to use
+ * apt_cache_file.
*/
void surrounding_or(pkgCache::DepIterator dep,
pkgCache::DepIterator &start,
- pkgCache::DepIterator &end);
+ pkgCache::DepIterator &end,
+ pkgCache *cache = NULL);
/** \return true if pkg is suggested by another package which will be
Modified: branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver_universe.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver_universe.h (original)
+++ branches/aptitude-0.3/aptitude/src/generic/aptitude_resolver_universe.h Wed Aug 31 16:49:52 2005
@@ -210,7 +210,7 @@
{
// Throw away the end, since it's not necessary.
pkgCache::DepIterator end;
- surrounding_or(dep, start, end);
+ surrounding_or(dep, start, end, &cache->GetCache());
}
else
// Ignore ORs and just use the selected conflict.
More information about the Aptitude-svn-commit
mailing list