X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/018f15333c0b24232f771a675fc2b4c8cb5fe799..ded8766eeaff8d2e7e7fc0ff29aca25269a08313:/apt-pkg/acquire-method.cc?ds=sidebyside diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc index fc060d83e..8b1de6fb3 100644 --- a/apt-pkg/acquire-method.cc +++ b/apt-pkg/acquire-method.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acquire-method.cc,v 1.12 1998/12/04 22:56:50 jgg Exp $ +// $Id: acquire-method.cc,v 1.14 1998/12/05 04:19:01 jgg Exp $ /* ###################################################################### Acquire Method @@ -47,8 +47,9 @@ pkgAcqMethod::pkgAcqMethod(const char *Ver,unsigned long Flags) exit(100); SetNonBlock(STDIN_FILENO,true); - + Queue = 0; + QueueBack = 0; } /*}}}*/ // AcqMethod::Fail - A fetch has failed /*{{{*/ @@ -78,6 +79,8 @@ void pkgAcqMethod::Fail(string Err,bool Transient) FetchItem *Tmp = Queue; Queue = Queue->Next; delete Tmp; + if (Tmp == QueueBack) + QueueBack = Queue; } else snprintf(S,sizeof(S),"400 URI Failure\nURI: \n" @@ -183,6 +186,8 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt) FetchItem *Tmp = Queue; Queue = Queue->Next; delete Tmp; + if (Tmp == QueueBack) + QueueBack = Queue; } /*}}}*/ // AcqMethod::MediaFail - Syncronous request for new media /*{{{*/ @@ -205,11 +210,11 @@ bool pkgAcqMethod::MediaFail(string Required,string Drive) while (1) { if (WaitFd(STDIN_FILENO) == false) - exit(0); + return false; if (ReadMessages(STDIN_FILENO,MyMessages) == false) - exit(0); - + return false; + string Message = MyMessages.front(); MyMessages.erase(MyMessages.begin()); @@ -225,13 +230,13 @@ bool pkgAcqMethod::MediaFail(string Required,string Drive) // Change ack if (Number == 603) { - while (Message.empty() == false) + while (MyMessages.empty() == false) { Messages.push_back(MyMessages.front()); MyMessages.erase(MyMessages.begin()); } - return StringToBool(LookupTag(Message,"Fail"),false); + return !StringToBool(LookupTag(Message,"Fail"),false); } Messages.push_back(Message); @@ -328,7 +333,9 @@ int pkgAcqMethod::Run(bool Single) FetchItem **I = &Queue; for (; *I != 0; I = &(*I)->Next); *I = Tmp; - + if (QueueBack == 0) + QueueBack = Tmp; + // Notify that this item is to be fetched. if (Fetch(Tmp) == false) Fail();