summaryrefslogtreecommitdiff
path: root/apt-pkg/cdrom.cc
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg/cdrom.cc')
-rw-r--r--apt-pkg/cdrom.cc76
1 files changed, 54 insertions, 22 deletions
diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc
index a9c63fd21..07983e44f 100644
--- a/apt-pkg/cdrom.cc
+++ b/apt-pkg/cdrom.cc
@@ -78,25 +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)
- {
- 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.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)
@@ -109,9 +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 = file.substr(0,file.size()-3);
- 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);
@@ -257,11 +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)
- _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) {