X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/76fe5db7153957f8fda437e3bd614312b076f19e..8d4c859d0d20687a8ffcf9e1d60466d061c2e24d:/apt-pkg/cdrom.cc diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index 8be26e2bc..83165c6c0 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -6,6 +6,8 @@ #include #include #include +#include + #include #include #include @@ -160,7 +162,7 @@ bool pkgCdrom::FindPackages(string CD, return !_error->PendingError(); } - + /*}}}*/ // Score - We compute a 'score' for a path /*{{{*/ // --------------------------------------------------------------------- /* Paths are scored based on how close they come to what I consider @@ -210,46 +212,34 @@ int pkgCdrom::Score(string Path) return Res; } - /*}}}*/ // DropBinaryArch - Dump dirs with a string like /binary-/ /*{{{*/ // --------------------------------------------------------------------- /* Here we drop everything that is not this machines arch */ bool pkgCdrom::DropBinaryArch(vector &List) { - char S[300]; - snprintf(S,sizeof(S),"/binary-%s/", - _config->Find("Apt::Architecture").c_str()); - + for (unsigned int I = 0; I < List.size(); I++) { const char *Str = List[I].c_str(); - - const char *Res; - if ((Res = strstr(Str,"/binary-")) == 0) + const char *Start, *End; + if ((Start = strstr(Str,"/binary-")) == 0) continue; - // Weird, remove it. - if (strlen(Res) < strlen(S)) - { - List.erase(List.begin() + I); - I--; - continue; - } - - // See if it is our arch - if (stringcmp(Res,Res + strlen(S),S) == 0) - continue; - - // Erase it + // Between Start and End is the architecture + Start += 8; + if ((End = strstr(Start,"/")) != 0 && Start != End && + APT::Configuration::checkArchitecture(string(Start, --End)) == true) + continue; // okay, architecture is accepted + + // not accepted -> Erase it List.erase(List.begin() + I); - I--; + --I; // the next entry is at the same index after the erase } return true; } - - + /*}}}*/ // DropRepeats - Drop repeated files resulting from symlinks /*{{{*/ // --------------------------------------------------------------------- /* Here we go and stat every file that we found and strip dup inodes. */ @@ -304,7 +294,6 @@ bool pkgCdrom::DropRepeats(vector &List,const char *Name) return true; } /*}}}*/ - // ReduceSourceList - Takes the path list and reduces it /*{{{*/ // --------------------------------------------------------------------- /* This takes the list of source list expressed entires and collects @@ -513,9 +502,8 @@ bool pkgCdrom::WriteSourceList(string Name,vector &List,bool Source) return true; } - - -bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log) + /*}}}*/ +bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log) /*{{{*/ { stringstream msg; @@ -573,9 +561,8 @@ bool pkgCdrom::Ident(string &ident, pkgCdromStatus *log) return true; } - - -bool pkgCdrom::Add(pkgCdromStatus *log) + /*}}}*/ +bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ { stringstream msg; @@ -834,8 +821,6 @@ bool pkgCdrom::Add(pkgCdromStatus *log) } } - - // Unmount and finish if (_config->FindB("APT::CDROM::NoMount",false) == false) { log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST); @@ -844,16 +829,16 @@ bool pkgCdrom::Add(pkgCdromStatus *log) return true; } - - -pkgUdevCdromDevices::pkgUdevCdromDevices() + /*}}}*/ +pkgUdevCdromDevices::pkgUdevCdromDevices() /*{{{*/ : libudev_handle(NULL) { } + /*}}}*/ bool -pkgUdevCdromDevices::Dlopen() +pkgUdevCdromDevices::Dlopen() /*{{{*/ { // alread open if(libudev_handle != NULL) @@ -880,9 +865,9 @@ pkgUdevCdromDevices::Dlopen() return true; } - + /*}}}*/ vector -pkgUdevCdromDevices::Scan() +pkgUdevCdromDevices::Scan() /*{{{*/ { vector cdrom_devices; struct udev_enumerate *enumerate; @@ -922,9 +907,11 @@ pkgUdevCdromDevices::Scan() } return cdrom_devices; } + /*}}}*/ - -pkgUdevCdromDevices::~pkgUdevCdromDevices() +pkgUdevCdromDevices::~pkgUdevCdromDevices() /*{{{*/ { - dlclose(libudev_handle); + if (libudev_handle != NULL) + dlclose(libudev_handle); } + /*}}}*/