summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/contrib/cdromutl.cc22
-rw-r--r--apt-pkg/contrib/cdromutl.h4
-rw-r--r--methods/cdrom.cc30
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.",