>From aa8c426c310b932b3791b3d2d25682448c7d1f52 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Fri, 19 Nov 2010 00:51:52 +0000 Subject: [PATCH] Obvious and probably incorrect fix for incorrect use of casecompare() casecompare() returns 0 for equality also adjust visit() so it does nothing when used to visit a node a second time (so explicit 'base-passwd' visit won't add a duplicate entry if it's already been visited, which also allows the recursive use to be simplified. Signed-off-by: Jon TURNEY --- package_db.cc | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff --git a/package_db.cc b/package_db.cc index 45dd3ce..f01624c 100644 --- a/package_db.cc +++ b/package_db.cc @@ -250,7 +250,7 @@ ConnectedLoopFinder::doIt() for (size_t i = 0; i < db.packages.size(); ++i) { packagemeta &pkg (*db.packages[i]); - if (pkg.installed && casecompare (pkg.name, "base-cygwin")) + if (pkg.installed && (casecompare (pkg.name, "base-cygwin") == 0)) { visit (i); break; @@ -259,7 +259,7 @@ ConnectedLoopFinder::doIt() for (size_t i = 0; i < db.packages.size(); ++i) { packagemeta &pkg (*db.packages[i]); - if (pkg.installed && casecompare (pkg.name, "base-passwd")) + if (pkg.installed && (casecompare (pkg.name, "base-passwd") == 0)) { visit (i); break; @@ -297,6 +297,10 @@ ConnectedLoopFinder::visit(size_t const nodeToVisit) if (!db.packages[nodeToVisit]->installed) /* Can't visit this node, and it is not less than any visted node */ return db.packages.size() + 1; + + if (visitOrder[nodeToVisit]) + return visitOrder[nodeToVisit]; + ++visited; visitOrder[nodeToVisit] = visited; @@ -324,10 +328,7 @@ ConnectedLoopFinder::visit(size_t const nodeToVisit) log (LOG_PLAIN) << "Search for package '" << (*i)->packageName() << "' failed." << endLog; else { - if (visitOrder[nodeJustVisited]) - minimumVisitId = std::min (minimumVisitId, visitOrder[nodeJustVisited]); - else - minimumVisitId = std::min (minimumVisitId, visit (nodeJustVisited)); + minimumVisitId = std::min (minimumVisitId, visit (nodeJustVisited)); } /* next and clause */ ++dp; -- 1.7.2.3