Skip to content
Snippets Groups Projects
Commit 49cb36fc authored by Michael Vogt's avatar Michael Vogt
Browse files

methods/cdrom.cc: move the scan into the loop that waits for a CD

parent a6418a4b
No related branches found
No related tags found
No related merge requests found
......@@ -847,7 +847,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log)
pkgUdevCdromDevices::pkgUdevCdromDevices()
: libudev_handle(NULL)
: libudev_handle(NULL), Dlopened(false)
{
}
......@@ -855,6 +855,10 @@ pkgUdevCdromDevices::pkgUdevCdromDevices()
bool
pkgUdevCdromDevices::Dlopen()
{
// alread open
if(Dlopened)
return true;
// see if we can get libudev
void *h = ::dlopen("libudev.so.0", RTLD_LAZY);
if(h == NULL)
......@@ -874,6 +878,7 @@ pkgUdevCdromDevices::Dlopen()
udev_list_entry_get_next = (udev_list_entry* (*)(udev_list_entry*))dlsym(h, "udev_list_entry_get_next");
udev_device_get_property_value = (const char* (*)(udev_device *, const char *))dlsym(h, "udev_device_get_property_value");
Dlopened = true;
return true;
}
......
......@@ -77,6 +77,8 @@ struct CdromDevice
class pkgUdevCdromDevices
{
private:
bool Dlopened;
protected:
// libudev dlopen stucture
void *libudev_handle;
......
......@@ -121,6 +121,8 @@ bool CDROMMethod::Fetch(FetchItem *Itm)
FetchResult Res;
bool Debug = _config->FindB("Debug::Acquire::cdrom",false);
if (Debug)
clog << "CDROMMethod::Fetch " << Itm->Uri << endl;
/* All IMS queries are returned as a hit, CDROMs are readonly so
time stamps never change */
......@@ -156,54 +158,63 @@ bool CDROMMethod::Fetch(FetchItem *Itm)
}
// We already have a CD inserted, but it is the wrong one
if (CurrentID.empty() == false && Database.Find("CD::" + CurrentID) != Get.Host)
if (CurrentID.empty() == false &&
CurrentID != "FAIL" &&
Database.Find("CD::" + CurrentID) != Get.Host)
{
Fail(_("Wrong CD-ROM"),true);
return true;
}
CDROM = _config->FindDir("Acquire::cdrom::mount","/cdrom/");
if (Debug)
clog << "Looking for CDROM at " << CDROM << endl;
// auto-detect mode
if (CDROM == "apt-udev-auto/")
if (CDROM[0] == '.')
CDROM= SafeGetCWD() + '/' + CDROM;
string NewID;
pkgUdevCdromDevices udev;
while (CurrentID.empty() == true)
{
pkgUdevCdromDevices udev;
if(udev.Dlopen())
// hrm, ugly the loop here
if (CDROM == "apt-udev-auto/")
{
vector<struct CdromDevice> v = udev.Scan();
for (unsigned int i=0; i < v.size(); i++)
if(udev.Dlopen())
{
if (!v[i].Mounted)
vector<struct CdromDevice> v = udev.Scan();
for (unsigned int i=0; i < v.size(); i++)
{
if (!FileExists("/media/apt"))
mkdir("/media/apt", 0755);
if(MountCdrom("/media/apt", v[i].DeviceName))
if (Debug)
clog << "Have cdrom device " << v[i].DeviceName << endl;
if (!v[i].Mounted)
{
if (IsCorrectCD(Get, "/media/apt"))
if (!FileExists("/media/apt"))
mkdir("/media/apt", 0755);
if(MountCdrom("/media/apt", v[i].DeviceName))
{
if (IsCorrectCD(Get, "/media/apt"))
{
MountedByApt = true;
CDROM = "/media/apt";
break;
} else {
UnmountCdrom("/media/apt");
}
}
} else {
if (IsCorrectCD(Get, v[i].MountPath))
{
MountedByApt = true;
CDROM = "/media/apt";
CDROM = v[i].MountPath;
break;
} else {
UnmountCdrom("/media/apt");
}
}
} else {
if (IsCorrectCD(Get, v[i].MountPath))
{
CDROM = v[i].MountPath;
break;
}
}
} else {
_error->WarningE("udev.Dlopen() failed","foo");
}
}
}
if (CDROM[0] == '.')
CDROM= SafeGetCWD() + '/' + CDROM;
string NewID;
while (CurrentID.empty() == true)
{
bool Hit = false;
if(!IsMounted(CDROM))
MountedByApt = MountCdrom(CDROM);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment