a signed short, because large upgrades can result in an overflow for
core packages. Thanks again to Colin Watson. Closes: #657732,
LP: #917173.
{
// Allocate memory
unsigned long Size = Cache.Head().PackageCount;
{
// Allocate memory
unsigned long Size = Cache.Head().PackageCount;
- Scores = new signed short[Size];
+ Scores = new int[Size];
Flags = new unsigned char[Size];
memset(Flags,0,sizeof(*Flags)*Size);
Flags = new unsigned char[Size];
memset(Flags,0,sizeof(*Flags)*Size);
memset(Scores,0,sizeof(*Scores)*Size);
// Important Required Standard Optional Extra
memset(Scores,0,sizeof(*Scores)*Size);
// Important Required Standard Optional Extra
- signed short PrioMap[] = {
- (signed short) _config->FindI("pkgProblemResolver::Scores::Important",3),
- (signed short) _config->FindI("pkgProblemResolver::Scores::Required",2),
- (signed short) _config->FindI("pkgProblemResolver::Scores::Standard",1),
- (signed short) _config->FindI("pkgProblemResolver::Scores::Optional",-1),
- (signed short) _config->FindI("pkgProblemResolver::Scores::Extra",-2)
+ _config->FindI("pkgProblemResolver::Scores::Important",3),
+ _config->FindI("pkgProblemResolver::Scores::Required",2),
+ _config->FindI("pkgProblemResolver::Scores::Standard",1),
+ _config->FindI("pkgProblemResolver::Scores::Optional",-1),
+ _config->FindI("pkgProblemResolver::Scores::Extra",-2)
- signed short PrioEssentials = _config->FindI("pkgProblemResolver::Scores::Essentials",100);
- signed short PrioInstalledAndNotObsolete = _config->FindI("pkgProblemResolver::Scores::NotObsolete",1);
- signed short PrioDepends = _config->FindI("pkgProblemResolver::Scores::Depends",1);
- signed short PrioRecommends = _config->FindI("pkgProblemResolver::Scores::Recommends",1);
- signed short AddProtected = _config->FindI("pkgProblemResolver::Scores::AddProtected",10000);
- signed short AddEssential = _config->FindI("pkgProblemResolver::Scores::AddEssential",5000);
+ int PrioEssentials = _config->FindI("pkgProblemResolver::Scores::Essentials",100);
+ int PrioInstalledAndNotObsolete = _config->FindI("pkgProblemResolver::Scores::NotObsolete",1);
+ int PrioDepends = _config->FindI("pkgProblemResolver::Scores::Depends",1);
+ int PrioRecommends = _config->FindI("pkgProblemResolver::Scores::Recommends",1);
+ int AddProtected = _config->FindI("pkgProblemResolver::Scores::AddProtected",10000);
+ int AddEssential = _config->FindI("pkgProblemResolver::Scores::AddEssential",5000);
if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
clog << "Settings used to calculate pkgProblemResolver::Scores::" << endl
if (_config->FindB("Debug::pkgProblemResolver::ShowScores",false) == true)
clog << "Settings used to calculate pkgProblemResolver::Scores::" << endl
if (Cache[I].InstallVer == 0)
continue;
if (Cache[I].InstallVer == 0)
continue;
- signed short &Score = Scores[I->ID];
+ int &Score = Scores[I->ID];
/* This is arbitrary, it should be high enough to elevate an
essantial package above most other packages but low enough
/* This is arbitrary, it should be high enough to elevate an
essantial package above most other packages but low enough
}
// Copy the scores to advoid additive looping
}
// Copy the scores to advoid additive looping
- SPtrArray<signed short> OldScores = new signed short[Size];
+ SPtrArray<int> OldScores = new int[Size];
memcpy(OldScores,Scores,sizeof(*Scores)*Size);
/* Now we cause 1 level of dependency inheritance, that is we add the
memcpy(OldScores,Scores,sizeof(*Scores)*Size);
/* Now we cause 1 level of dependency inheritance, that is we add the
enum Flags {Protected = (1 << 0), PreInstalled = (1 << 1),
Upgradable = (1 << 2), ReInstateTried = (1 << 3),
ToRemove = (1 << 4)};
enum Flags {Protected = (1 << 0), PreInstalled = (1 << 1),
Upgradable = (1 << 2), ReInstateTried = (1 << 3),
ToRemove = (1 << 4)};
unsigned char *Flags;
bool Debug;
unsigned char *Flags;
bool Debug;
* apt-pkg/algorithms.cc: iterate Breaks the same way as Conflicts, so that
we resolve virtual package Breaks more effectively. Thanks to Colin
Watson for the patch. Closes: #657695, LP: #922485.
* apt-pkg/algorithms.cc: iterate Breaks the same way as Conflicts, so that
we resolve virtual package Breaks more effectively. Thanks to Colin
Watson for the patch. Closes: #657695, LP: #922485.
+ * apt-pkg/algorithms.{cc,h}: use an int to represent resolver scores, not
+ a signed short, because large upgrades can result in an overflow for
+ core packages. Thanks again to Colin Watson. Closes: #657732,
+ LP: #917173.
-- Steve Langasek <steve.langasek@ubuntu.com> Sat, 28 Jan 2012 11:40:53 -0800
-- Steve Langasek <steve.langasek@ubuntu.com> Sat, 28 Jan 2012 11:40:53 -0800