]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/cdrom.cc
* apt-pkg/cdrom.cc:
[apt.git] / apt-pkg / cdrom.cc
index c10ca6bd1e0e15c5e211c2b9300112a2c82fcb38..8e746ee3013f16ad9ae4b02b521f3cc4f3368ccb 100644 (file)
@@ -363,6 +363,7 @@ void pkgCdrom::ReduceSourcelist(string CD,vector<string> &List)
 
       string Word1 = string(*I,Space,SSpace-Space);
       string Prefix = string(*I,0,Space);
+      string Component = string(*I,SSpace);
       for (vector<string>::iterator J = List.begin(); J != I; ++J)
       {
         // Find a space..
@@ -377,9 +378,11 @@ void pkgCdrom::ReduceSourcelist(string CD,vector<string> &List)
            continue;
         if (string(*J,Space2,SSpace2-Space2) != Word1)
            continue;
-        
-        *J += string(*I,SSpace);
-        *I = string();
+
+        string Component2 = string(*J, SSpace2) + " ";
+        if (Component2.find(Component + " ") == std::string::npos)
+           *J += Component;
+        I->clear();
       }
    }   
 
@@ -409,12 +412,12 @@ bool pkgCdrom::WriteDatabase(Configuration &Cnf)
    
    /* Write out all of the configuration directives by walking the
       configuration tree */
-   _config->Dump(Out, NULL, "%f \"%v\";\n", false);
+   Cnf.Dump(Out, NULL, "%f \"%v\";\n", false);
 
    Out.close();
 
-   if (FileExists(DFile) == true && link(DFile.c_str(),string(DFile + '~').c_str()) != 0)
-      return _error->Errno("link", "Failed to link %s to %s~", DFile.c_str(), DFile.c_str());
+   if (FileExists(DFile) == true)
+      rename(DFile.c_str(), string(DFile + '~').c_str());
    if (rename(NewFile.c_str(),DFile.c_str()) != 0)
       return _error->Errno("rename","Failed to rename %s.new to %s",
                           DFile.c_str(),DFile.c_str());