]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/algorithms.cc
doesn't execute autoremove marker setting if an external solver is called
[apt.git] / apt-pkg / algorithms.cc
index 00f558420480b34acefc87da4057447ca5d760c1..fea9e92e15d71958f1ad713d5e563a95b6d2ea1c 100644 (file)
@@ -740,19 +740,23 @@ bool pkgProblemResolver::DoUpgrade(pkgCache::PkgIterator Pkg)
 bool pkgProblemResolver::Resolve(bool BrokenFix)
 {
    std::string const solver = _config->Find("APT::Solver::Name", "internal");
+
    if (solver != "internal")
    {
-      FILE* output = fopen("/tmp/scenario.log", "w");
-      EDSP::WriteScenario(Cache, output);
-      fclose(output);
-      output = fopen("/tmp/request.log", "w");
-      EDSP::WriteRequest(Cache, output);
-      fclose(output);
-      if (ResolveInternal(BrokenFix) == false)
+      int solver_in, solver_out;
+      if (EDSP::ExecuteSolver(solver.c_str(), &solver_in, &solver_out) == false)
         return false;
-      output = fopen("/tmp/solution.log", "w");
-      EDSP::WriteSolution(Cache, output);
+
+      FILE* output = fdopen(solver_in, "w");
+      if (output == NULL)
+         return _error->Errno("Resolve", "fdopen on solver stdin failed");
+      EDSP::WriteRequest(Cache, output);
+      EDSP::WriteScenario(Cache, output);
       fclose(output);
+
+      if (EDSP::ReadResponse(solver_out, Cache) == false)
+        return _error->Error("Reading solver response failed");
+
       return true;
    }
    return ResolveInternal(BrokenFix);