#include<apt-pkg/strutl.h>
#include<apt-pkg/cdrom.h>
#include<apt-pkg/aptconfiguration.h>
+#include<apt-pkg/configuration.h>
+#include<apt-pkg/fileutl.h>
#include<sstream>
#include<fstream>
{
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;
- }
-
- // see if we find translatin indexes
+ // Continue down if thorough is given
+ if (_config->FindB("APT::CDROM::Thorough",false) == false)
+ return true;
+ break;
+ }
+ }
+
+ // see if we find translation indices
if (stat("i18n",&Buf) == 0)
{
D = opendir("i18n");
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);
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) {