summaryrefslogtreecommitdiff
path: root/apt-pkg/cdrom.cc
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2011-11-23 11:54:56 +0100
committerMichael Vogt <michael.vogt@ubuntu.com>2011-11-23 11:54:56 +0100
commit4d45b77bab33b9b7d6328dbc9265b5c0971a875d (patch)
treef104aed299aa3e97de6dc9b58310e45fd255f512 /apt-pkg/cdrom.cc
parent905693203943283b3c2b1dbf32e40a738392302a (diff)
parent5cbddfa3c7fd1d6be3657bdf2fae39c216fe5eeb (diff)
merged from debian-experimental
Diffstat (limited to 'apt-pkg/cdrom.cc')
-rw-r--r--apt-pkg/cdrom.cc83
1 files changed, 54 insertions, 29 deletions
diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc
index d1bc1f3ba..07983e44f 100644
--- a/apt-pkg/cdrom.cc
+++ b/apt-pkg/cdrom.cc
@@ -78,27 +78,43 @@ bool pkgCdrom::FindPackages(string CD,
{
SigList.push_back(CD);
}
+
/* Aha! We found some package files. We assume that everything under
this dir is controlled by those package files so we don't look down
anymore */
- if (stat("Packages",&Buf) == 0 || stat("Packages.gz",&Buf) == 0 ||
- stat("Packages.bz2",&Buf) == 0 || stat("Packages.xz",&Buf) == 0)
- {
- List.push_back(CD);
+ std::vector<std::string> types = APT::Configuration::getCompressionTypes();
+ types.push_back("");
+ for (std::vector<std::string>::const_iterator t = types.begin();
+ t != types.end(); ++t)
+ {
+ std::string filename = std::string("Packages");
+ if ((*t).size() > 0)
+ filename.append("."+*t);
+ if (stat(filename.c_str(), &Buf) == 0)
+ {
+ List.push_back(CD);
- // Continue down if thorough is given
- if (_config->FindB("APT::CDROM::Thorough",false) == false)
- return true;
- }
- if (stat("Sources.xz",&Buf) == 0 || stat("Sources.bz2",&Buf) == 0 ||
- stat("Sources.gz",&Buf) == 0 || stat("Sources",&Buf) == 0)
- {
- SList.push_back(CD);
+ // Continue down if thorough is given
+ if (_config->FindB("APT::CDROM::Thorough",false) == false)
+ return true;
+ break;
+ }
+ }
+ for (std::vector<std::string>::const_iterator t = types.begin();
+ t != types.end(); ++t)
+ {
+ std::string filename = std::string("Sources");
+ if ((*t).size() > 0)
+ filename.append("."+*t);
+ {
+ SList.push_back(CD);
- // Continue down if thorough is given
- if (_config->FindB("APT::CDROM::Thorough",false) == false)
- return true;
- }
+ // Continue down if thorough is given
+ if (_config->FindB("APT::CDROM::Thorough",false) == false)
+ return true;
+ break;
+ }
+ }
// see if we find translatin indexes
if (stat("i18n",&Buf) == 0)
@@ -111,12 +127,15 @@ bool pkgCdrom::FindPackages(string CD,
if (_config->FindB("Debug::aptcdrom",false) == true)
std::clog << "found translations: " << Dir->d_name << "\n";
string file = Dir->d_name;
- if(file.substr(file.size()-3,file.size()) == ".gz" ||
- file.substr(file.size()-3,file.size()) == ".xz")
- file = file.substr(0,file.size()-3);
- if(file.substr(file.size()-4,file.size()) == ".bz2")
- file = file.substr(0,file.size()-4);
- TransList.push_back(CD+"i18n/"+ file);
+ for (std::vector<std::string>::const_iterator t = types.begin();
+ t != types.end(); ++t)
+ {
+ std::string needle = "." + *t;
+ if(file.substr(file.size()-needle.size()) == needle)
+ file = file.substr(0, file.size()-needle.size());
+ TransList.push_back(CD+"i18n/"+ file);
+ break;
+ }
}
}
closedir(D);
@@ -262,13 +281,19 @@ bool pkgCdrom::DropRepeats(vector<string> &List,const char *Name)
for (unsigned int I = 0; I != List.size(); I++)
{
struct stat Buf;
- if (stat((List[I] + Name).c_str(),&Buf) != 0 &&
- stat((List[I] + Name + ".gz").c_str(),&Buf) != 0 &&
- stat((List[I] + Name + ".bz2").c_str(),&Buf) != 0 &&
- stat((List[I] + Name + ".xz").c_str(),&Buf) != 0)
- _error->Errno("stat","Failed to stat %s%s",List[I].c_str(),
- Name);
- Inodes[I] = Buf.st_ino;
+ std::vector<std::string> types = APT::Configuration::getCompressionTypes();
+ types.push_back("");
+ for (std::vector<std::string>::const_iterator t = types.begin();
+ t != types.end(); ++t)
+ {
+ std::string filename = List[I] + Name;
+ if ((*t).size() > 0)
+ filename.append("." + *t);
+ if (stat(filename.c_str(), &Buf) != 0)
+ _error->Errno("stat","Failed to stat %s%s",List[I].c_str(),
+ Name);
+ Inodes[I] = Buf.st_ino;
+ }
}
if (_error->PendingError() == true) {