// -*- mode: cpp; mode: fold -*-
// Description /*{{{*/
-// $Id: cdrom.cc,v 1.11 1999/06/09 23:06:39 jgg Exp $
+// $Id: cdrom.cc,v 1.16 1999/10/18 00:37:36 jgg Exp $
/* ######################################################################
CDROM URI method for APT
class CDROMMethod : public pkgAcqMethod
{
- Configuration Database;
bool DatabaseLoaded;
+ ::Configuration Database;
string CurrentID;
+ string CDROM;
+ bool Mounted;
virtual bool Fetch(FetchItem *Itm);
string GetID(string Name);
+ virtual void Exit();
public:
// ---------------------------------------------------------------------
/* */
CDROMMethod::CDROMMethod() : pkgAcqMethod("1.0",SingleInstance | LocalOnly |
- SendConfig), DatabaseLoaded(false)
+ SendConfig | NeedsCleanup),
+ DatabaseLoaded(false),
+ Mounted(false)
{
};
/*}}}*/
+// CDROMMethod::Exit - Unmount the disc if necessary /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+void CDROMMethod::Exit()
+{
+ if (Mounted == true)
+ UnmountCdrom(CDROM);
+}
+ /*}}}*/
// CDROMMethod::GetID - Search the database for a matching string /*{{{*/
// ---------------------------------------------------------------------
/* */
{
Res.LastModified = Itm->LastModified;
Res.IMSHit = true;
+ Res.Filename = File;
URIDone(Res);
return true;
}
return true;
}
- string CDROM = _config->FindDir("Acquire::cdrom::mount","/cdrom/");
+ CDROM = _config->FindDir("Acquire::cdrom::mount","/cdrom/");
if (CDROM[0] == '.')
CDROM= SafeGetCWD() + '/' + CDROM;
string NewID;
- while (1)
+ while (CurrentID.empty() == true)
{
bool Hit = false;
for (unsigned int Version = 2; Version != 0; Version--)
}
MountCdrom(CDROM);
+ Mounted = true;
}
// Found a CD
if (stat(Res.Filename.c_str(),&Buf) != 0)
return _error->Error("File not found");
- CurrentID = NewID;
+ if (NewID.empty() == false)
+ CurrentID = NewID;
Res.LastModified = Buf.st_mtime;
Res.IMSHit = true;
Res.Size = Buf.st_size;