X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/f46e768107c0250eb0609a89a74b66ab3c9d8cec..bebdca4bf63ae661c60bc1e0f4e03e6bbb7a7cc5:/apt-pkg/acquire-method.cc diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc index 7c3fdecb3..4b1642a3f 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.19 1999/04/15 02:43:47 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 /*{{{*/ @@ -67,7 +69,16 @@ void pkgAcqMethod::Fail(bool Transient) // --------------------------------------------------------------------- /* */ void pkgAcqMethod::Fail(string Err,bool Transient) -{ +{ + // Strip out junk from the error messages + for (char *I = Err.begin(); I != Err.end(); I++) + { + if (*I == '\r') + *I = ' '; + if (*I == '\n') + *I = ' '; + } + char S[1024]; if (Queue != 0) { @@ -78,6 +89,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" @@ -106,14 +119,14 @@ void pkgAcqMethod::URIStart(FetchResult &Res) End += snprintf(S,sizeof(S),"200 URI Start\nURI: %s\n",Queue->Uri.c_str()); if (Res.Size != 0) - End += snprintf(End,sizeof(S) - (End - S),"Size: %u\n",Res.Size); + End += snprintf(End,sizeof(S) - (End - S),"Size: %lu\n",Res.Size); if (Res.LastModified != 0) End += snprintf(End,sizeof(S) - (End - S),"Last-Modified: %s\n", TimeRFC1123(Res.LastModified).c_str()); if (Res.ResumePoint != 0) - End += snprintf(End,sizeof(S) - (End - S),"Resume-Point: %u\n", + End += snprintf(End,sizeof(S) - (End - S),"Resume-Point: %lu\n", Res.ResumePoint); strcat(End,"\n"); @@ -138,17 +151,17 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt) End += snprintf(End,sizeof(S) - (End - S),"Filename: %s\n",Res.Filename.c_str()); if (Res.Size != 0) - End += snprintf(End,sizeof(S) - (End - S),"Size: %u\n",Res.Size); + End += snprintf(End,sizeof(S) - (End - S),"Size: %lu\n",Res.Size); if (Res.LastModified != 0) End += snprintf(End,sizeof(S) - (End - S),"Last-Modified: %s\n", 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", + End += snprintf(End,sizeof(S) - (End - S),"Resume-Point: %lu\n", Res.ResumePoint); if (Res.IMSHit == true) @@ -161,14 +174,14 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt) End += snprintf(End,sizeof(S) - (End - S),"Alt-Filename: %s\n",Alt->Filename.c_str()); if (Alt->Size != 0) - End += snprintf(End,sizeof(S) - (End - S),"Alt-Size: %u\n",Alt->Size); + End += snprintf(End,sizeof(S) - (End - S),"Alt-Size: %lu\n",Alt->Size); if (Alt->LastModified != 0) End += snprintf(End,sizeof(S) - (End - S),"Alt-Last-Modified: %s\n", 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 +196,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 +220,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 +240,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); @@ -265,7 +280,8 @@ bool pkgAcqMethod::Configuration(string Message) if (End == Equals) return false; - Cnf.Set(string(I,Equals-I),string(Equals+1,End-Equals-1)); + Cnf.Set(DeQuoteString(string(I,Equals-I)), + DeQuoteString(string(Equals+1,End-Equals-1))); I = End; } @@ -328,7 +344,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();