X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/f46e768107c0250eb0609a89a74b66ab3c9d8cec..f17ac0977167d1e58316d3b3f7159f65d40a090a:/apt-pkg/acquire-method.cc diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc index 7c3fdecb3..9bb76e53c 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.10 1998/12/03 07:29:16 jgg Exp $ +// $Id: acquire-method.cc,v 1.17 1999/02/08 07:30:49 jgg Exp $ /* ###################################################################### Acquire Method @@ -14,10 +14,11 @@ #include #include #include -#include +#include #include #include +#include /*}}}*/ // AcqMethod::pkgAcqMethod - Constructor /*{{{*/ @@ -47,8 +48,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 +80,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" @@ -145,7 +149,7 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt) TimeRFC1123(Res.LastModified).c_str()); if (Res.MD5Sum.empty() == false) - End += snprintf(End,sizeof(S) - (End - S),"MD5Sum: %s\n",Res.MD5Sum.c_str()); + End += snprintf(End,sizeof(S) - (End - S),"MD5-Hash: %s\n",Res.MD5Sum.c_str()); if (Res.ResumePoint != 0) End += snprintf(End,sizeof(S) - (End - S),"Resume-Point: %u\n", @@ -168,7 +172,7 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt) TimeRFC1123(Alt->LastModified).c_str()); if (Alt->MD5Sum.empty() == false) - End += snprintf(End,sizeof(S) - (End - S),"Alt-MD5Sum: %s\n", + End += snprintf(End,sizeof(S) - (End - S),"Alt-MD5-Hash: %s\n", Alt->MD5Sum.c_str()); if (Alt->IMSHit == true) @@ -183,13 +187,15 @@ 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 /*{{{*/ // --------------------------------------------------------------------- /* This sends a 403 Media Failure message to the APT and waits for it to be ackd */ -void pkgAcqMethod::MediaFail(string Required,string Drive) +bool pkgAcqMethod::MediaFail(string Required,string Drive) { char S[1024]; snprintf(S,sizeof(S),"403 Media Failure\nMedia: %s\nDrive: %s\n\n", @@ -205,11 +211,11 @@ void 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 +231,13 @@ void 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; + + return !StringToBool(LookupTag(Message,"Fail"),false); } Messages.push_back(Message); @@ -328,7 +334,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();