X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/e331f6edcb86e6acb2888ec0721e55bf43e10bc2..52643bec17df4e36a9bd27183886e2c0c7a8ebd8:/methods/file.cc diff --git a/methods/file.cc b/methods/file.cc index 1b3183f05..9cdd5bc2d 100644 --- a/methods/file.cc +++ b/methods/file.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: file.cc,v 1.6 1998/11/14 01:39:49 jgg Exp $ +// $Id: file.cc,v 1.9.2.1 2004/01/16 18:58:50 mdz Exp $ /* ###################################################################### File URI method for APT @@ -15,9 +15,12 @@ // Include Files /*{{{*/ #include #include +#include +#include #include #include +#include /*}}}*/ class FileMethod : public pkgAcqMethod @@ -37,7 +40,9 @@ bool FileMethod::Fetch(FetchItem *Itm) URI Get = Itm->Uri; string File = Get.Path; FetchResult Res; - + if (Get.Host.empty() == false) + return _error->Error(_("Invalid URI, local URIS must not start with //")); + // See if the file exists struct stat Buf; if (stat(File.c_str(),&Buf) == 0) @@ -46,7 +51,7 @@ bool FileMethod::Fetch(FetchItem *Itm) Res.Filename = File; Res.LastModified = Buf.st_mtime; Res.IMSHit = false; - if (Itm->LastModified == Buf.st_mtime) + if (Itm->LastModified == Buf.st_mtime && Itm->LastModified != 0) Res.IMSHit = true; } @@ -62,7 +67,7 @@ bool FileMethod::Fetch(FetchItem *Itm) AltRes.Filename = File; AltRes.LastModified = Buf.st_mtime; AltRes.IMSHit = false; - if (Itm->LastModified == Buf.st_mtime) + if (Itm->LastModified == Buf.st_mtime && Itm->LastModified != 0) AltRes.IMSHit = true; URIDone(Res,&AltRes); @@ -71,8 +76,12 @@ bool FileMethod::Fetch(FetchItem *Itm) } if (Res.Filename.empty() == true) - return _error->Error("File not found"); - + return _error->Error(_("File not found")); + + Hashes Hash; + FileFd Fd(Res.Filename, FileFd::ReadOnly); + Hash.AddFD(Fd.Fd(), Fd.Size()); + Res.TakeHashes(Hash); URIDone(Res); return true; } @@ -80,6 +89,8 @@ bool FileMethod::Fetch(FetchItem *Itm) int main() { + setlocale(LC_ALL, ""); + FileMethod Mth; return Mth.Run(); }