X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/0940230dd6710ff5b555bed8be3d75ae0d150a08..8d1cb6da6e21302c654da3f09de3975af7e4a11f:/methods/file.cc diff --git a/methods/file.cc b/methods/file.cc index b689de619..5cbf1924e 100644 --- a/methods/file.cc +++ b/methods/file.cc @@ -15,12 +15,12 @@ // Include Files /*{{{*/ #include -#include #include #include #include #include #include +#include "aptmethod.h" #include #include @@ -28,24 +28,13 @@ #include /*}}}*/ -class FileMethod : public pkgAcqMethod +class FileMethod : public aptMethod { virtual bool Fetch(FetchItem *Itm) APT_OVERRIDE; - virtual bool Configuration(std::string Message) APT_OVERRIDE; public: - - FileMethod() : pkgAcqMethod("1.0",SingleInstance | SendConfig | LocalOnly) {}; + FileMethod() : aptMethod("file", "1.0", SingleInstance | SendConfig | LocalOnly) {}; }; -bool FileMethod::Configuration(std::string Message) -{ - if (pkgAcqMethod::Configuration(Message) == false) - return false; - - DropPrivsOrDie(); - - return true; -} // FileMethod::Fetch - Fetch a file /*{{{*/ // --------------------------------------------------------------------- @@ -76,8 +65,9 @@ bool FileMethod::Fetch(FetchItem *Itm) } } if (Res.IMSHit != true) - unlink(Itm->DestFile.c_str()); + RemoveFile("file", Itm->DestFile); + int olderrno = 0; // See if the file exists if (stat(File.c_str(),&Buf) == 0) { @@ -92,11 +82,10 @@ bool FileMethod::Fetch(FetchItem *Itm) Res.IMSHit = true; } - Hashes Hash(Itm->ExpectedHashes); - FileFd Fd(File, FileFd::ReadOnly); - Hash.AddFD(Fd); - Res.TakeHashes(Hash); + CalculateHashes(Itm, Res); } + else + olderrno = errno; if (Res.IMSHit == false) URIStart(Res); @@ -108,7 +97,7 @@ bool FileMethod::Fetch(FetchItem *Itm) { if (APT::String::Endswith(File, *ext) == true) { - std::string const unfile = File.substr(0, File.length() - ext->length() - 1); + std::string const unfile = File.substr(0, File.length() - ext->length()); if (stat(unfile.c_str(),&Buf) == 0) { AltRes.Size = Buf.st_size; @@ -128,7 +117,10 @@ bool FileMethod::Fetch(FetchItem *Itm) else if (Res.Filename.empty() == false) URIDone(Res); else - return _error->Error(_("File not found")); + { + errno = olderrno; + return _error->Errno(File.c_str(), _("File not found")); + } return true; } @@ -136,8 +128,5 @@ bool FileMethod::Fetch(FetchItem *Itm) int main() { - setlocale(LC_ALL, ""); - - FileMethod Mth; - return Mth.Run(); + return FileMethod().Run(); }