X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/bf783d9044cb5c9e851fbf10c9bb7e6192b13afd..21248c0f00ee71412dbadc6ebf84011cf974346d:/methods/cdrom.cc?ds=sidebyside

diff --git a/methods/cdrom.cc b/methods/cdrom.cc
index 763547013..10cb29f66 100644
--- a/methods/cdrom.cc
+++ b/methods/cdrom.cc
@@ -8,17 +8,20 @@
    ##################################################################### */
 									/*}}}*/
 // Include Files							/*{{{*/
+#include <config.h>
+
 #include <apt-pkg/acquire-method.h>
 #include <apt-pkg/cdrom.h>
 #include <apt-pkg/cdromutl.h>
 #include <apt-pkg/error.h>
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/fileutl.h>
+#include <apt-pkg/strutl.h>
 #include <apt-pkg/hashes.h>
 
+#include <string>
+#include <vector>
 #include <sys/stat.h>
-#include <unistd.h>
-#include <dlfcn.h>
 
 #include <iostream>
 #include <apti18n.h>
@@ -38,7 +41,7 @@ class CDROMMethod : public pkgAcqMethod
    pkgUdevCdromDevices UdevCdroms;
  
    bool IsCorrectCD(URI want, string MountPath, string& NewID);
-   bool AutoDetectAndMount(URI, string &NewID);
+   bool AutoDetectAndMount(const URI, string &NewID);
    virtual bool Fetch(FetchItem *Itm);
    string GetID(string Name);
    virtual void Exit();
@@ -54,11 +57,12 @@ class CDROMMethod : public pkgAcqMethod
 CDROMMethod::CDROMMethod() : pkgAcqMethod("1.0",SingleInstance | LocalOnly |
 					  SendConfig | NeedsCleanup |
 					  Removable), 
-                                          DatabaseLoaded(false), 
+                                          DatabaseLoaded(false),
+					  Debug(false),
                                           MountedByApt(false)
 {
    UdevCdroms.Dlopen();
-};
+}
 									/*}}}*/
 // CDROMMethod::Exit - Unmount the disc if necessary			/*{{{*/
 // ---------------------------------------------------------------------
@@ -92,7 +96,7 @@ string CDROMMethod::GetID(string Name)
 // CDROMMethod::AutoDetectAndMount                                      /*{{{*/
 // ---------------------------------------------------------------------
 /* Modifies class varaiable CDROM to the mountpoint */
-bool CDROMMethod::AutoDetectAndMount(URI Get, string NewID)
+bool CDROMMethod::AutoDetectAndMount(const URI Get, string &NewID)
 {
    vector<struct CdromDevice> v = UdevCdroms.Scan();
 
@@ -116,23 +120,24 @@ bool CDROMMethod::AutoDetectAndMount(URI Get, string NewID)
       return false;
 
    // check if we have the mount point
-   if (!FileExists("/media/apt"))
-      mkdir("/media/apt", 0755);
+   string AptMountPoint = _config->FindDir("Dir::Media::MountPath");
+   if (!FileExists(AptMountPoint))
+      mkdir(AptMountPoint.c_str(), 0750);
 
    // now try mounting
    for (unsigned int i=0; i < v.size(); i++)
    {
       if (!v[i].Mounted)
       {
-	 if(MountCdrom("/media/apt", v[i].DeviceName)) 
+	 if(MountCdrom(AptMountPoint, v[i].DeviceName)) 
 	 {
-	    if (IsCorrectCD(Get, "/media/apt", NewID))
+	    if (IsCorrectCD(Get, AptMountPoint, NewID))
 	    {
 	       MountedByApt = true;
-	       CDROM = "/media/apt";
+	       CDROM = AptMountPoint;
 	       return true;
 	    } else {
-	       UnmountCdrom("/media/apt");
+	       UnmountCdrom(AptMountPoint);
 	    }
 	 }
       }
@@ -218,7 +223,8 @@ bool CDROMMethod::Fetch(FetchItem *Itm)
       return true;
    }
 
-   CDROM = _config->FindDir("Acquire::cdrom::mount","/cdrom/");
+   bool AutoDetect = _config->FindB("Acquire::cdrom::AutoDetect", true);
+   CDROM = _config->FindDir("Acquire::cdrom::mount");
    if (Debug)
       clog << "Looking for CDROM at " << CDROM << endl;
 
@@ -228,7 +234,7 @@ bool CDROMMethod::Fetch(FetchItem *Itm)
    string NewID;
    while (CurrentID.empty() == true)
    {
-      if (CDROM == "apt-udev-auto/") 
+      if (AutoDetect)
 	 AutoDetectAndMount(Get, NewID);
 
       if(!IsMounted(CDROM))
@@ -260,9 +266,9 @@ bool CDROMMethod::Fetch(FetchItem *Itm)
    Res.LastModified = Buf.st_mtime;
    Res.Size = Buf.st_size;
 
-   Hashes Hash;
+   Hashes Hash(Itm->ExpectedHashes);
    FileFd Fd(Res.Filename, FileFd::ReadOnly);
-   Hash.AddFD(Fd.Fd(), Fd.Size());
+   Hash.AddFD(Fd);
    Res.TakeHashes(Hash);
 
    URIDone(Res);