diff options
-rw-r--r-- | apt-pkg/contrib/cdromutl.cc | 22 | ||||
-rw-r--r-- | apt-pkg/contrib/cdromutl.h | 4 | ||||
-rw-r--r-- | methods/cdrom.cc | 30 |
3 files changed, 40 insertions, 16 deletions
diff --git a/apt-pkg/contrib/cdromutl.cc b/apt-pkg/contrib/cdromutl.cc index d0d810c5d..99eb540ec 100644 --- a/apt-pkg/contrib/cdromutl.cc +++ b/apt-pkg/contrib/cdromutl.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: cdromutl.cc,v 1.5 1999/04/20 05:11:17 jgg Exp $ +// $Id: cdromutl.cc,v 1.6 1999/06/05 03:54:29 jgg Exp $ /* ###################################################################### CDROM Utilities - Some functions to manipulate CDROM mounts. @@ -160,7 +160,7 @@ bool MountCdrom(string Path) // --------------------------------------------------------------------- /* We convert everything we hash into a string, this prevents byte size/order from effecting the outcome. */ -bool IdentCdrom(string CD,string &Res) +bool IdentCdrom(string CD,string &Res,unsigned int Version) { MD5Summation Hash; @@ -182,8 +182,19 @@ bool IdentCdrom(string CD,string &Res) if (strcmp(Dir->d_name,".") == 0 || strcmp(Dir->d_name,"..") == 0) continue; - - sprintf(S,"%lu",Dir->d_ino); + + if (Version <= 1) + { + sprintf(S,"%lu",Dir->d_ino); + } + else + { + struct stat Buf; + if (stat(Dir->d_name,&Buf) != 0) + continue; + sprintf(S,"%lu",Buf.st_mtime); + } + Hash.Add(S); Hash.Add(Dir->d_name); }; @@ -201,7 +212,8 @@ bool IdentCdrom(string CD,string &Res) (long)(Buf.f_bfree*(Buf.f_bsize/1024))); Hash.Add(S); - Res = Hash.Result().Value(); + sprintf(S,"-%u",Version); + Res = Hash.Result().Value() + S; return true; } /*}}}*/ diff --git a/apt-pkg/contrib/cdromutl.h b/apt-pkg/contrib/cdromutl.h index a9f4f926c..309857dde 100644 --- a/apt-pkg/contrib/cdromutl.h +++ b/apt-pkg/contrib/cdromutl.h @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: cdromutl.h,v 1.1 1998/11/29 01:19:27 jgg Exp $ +// $Id: cdromutl.h,v 1.2 1999/06/05 03:54:29 jgg Exp $ /* ###################################################################### CDROM Utilities - Some functions to manipulate CDROM mounts. @@ -18,6 +18,6 @@ bool MountCdrom(string Path); bool UnmountCdrom(string Path); -bool IdentCdrom(string CD,string &Res); +bool IdentCdrom(string CD,string &Res,unsigned int Version = 2); #endif diff --git a/methods/cdrom.cc b/methods/cdrom.cc index a44465766..68511dd5b 100644 --- a/methods/cdrom.cc +++ b/methods/cdrom.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: cdrom.cc,v 1.9 1999/05/23 05:45:13 jgg Exp $ +// $Id: cdrom.cc,v 1.10 1999/06/05 03:54:29 jgg Exp $ /* ###################################################################### CDROM URI method for APT @@ -68,7 +68,9 @@ bool CDROMMethod::Fetch(FetchItem *Itm) URI Get = Itm->Uri; string File = Get.Path; FetchResult Res; - + + bool Debug = _config->FindB("Debug::Acquire::cdrom",false); + /* All IMS queries are returned as a hit, CDROMs are readonly so time stamps never change */ if (Itm->LastModified != 0) @@ -114,13 +116,23 @@ bool CDROMMethod::Fetch(FetchItem *Itm) string NewID; while (1) { - if (IdentCdrom(CDROM,NewID) == false) - return false; - - // A hit - if (Database.Find("CD::" + NewID) == Get.Host) - break; - + bool Hit = false; + for (unsigned int Version = 2; Version != 0; Version--) + { + if (IdentCdrom(CDROM,NewID,Version) == false) + return false; + + if (Debug == true) + clog << "ID " << Version << " " << NewID << endl; + + // A hit + if (Database.Find("CD::" + NewID) == Get.Host) + { + Hit = true; + break; + } + } + // I suppose this should prompt somehow? if (UnmountCdrom(CDROM) == false) return _error->Error("Unable to unmount the CD-ROM in %s, it may still be in use.", |