X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/8384ebdff13da4c2d8e6b4f71b6ef592219746df..b2e465d6d32d2dc884f58b94acb7e35f671a87fe:/apt-pkg/acquire-method.cc diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc index 13b11c8db..3b905f4e9 100644 --- a/apt-pkg/acquire-method.cc +++ b/apt-pkg/acquire-method.cc @@ -1,12 +1,12 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acquire-method.cc,v 1.20 1999/08/04 02:39:13 jgg Exp $ +// $Id: acquire-method.cc,v 1.25 2001/02/20 07:03:17 jgg Exp $ /* ###################################################################### Acquire Method This is a skeleton class that implements most of the functionality - of a method and some usefull functions to make method implementation + of a method and some useful functions to make method implementation simpler. The methods all derive this and specialize it. The most complex implementation is the http method which needs to provide pipelining, it runs the message engine at the same time it is @@ -24,6 +24,7 @@ #include #include +#include #include #include /*}}}*/ @@ -49,6 +50,12 @@ pkgAcqMethod::pkgAcqMethod(const char *Ver,unsigned long Flags) if ((Flags & LocalOnly) == LocalOnly) strcat(End,"Local-Only: true\n"); + + if ((Flags & NeedsCleanup) == NeedsCleanup) + strcat(End,"Needs-Cleanup: true\n"); + + if ((Flags & Removable) == Removable) + strcat(End,"Removable: true\n"); strcat(End,"\n"); if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S)) @@ -89,8 +96,9 @@ void pkgAcqMethod::Fail(string Err,bool Transient) char S[1024]; if (Queue != 0) { - snprintf(S,sizeof(S),"400 URI Failure\nURI: %s\n" - "Message: %s\n",Queue->Uri.c_str(),Err.c_str()); + snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: %s\n" + "Message: %s %s\n",Queue->Uri.c_str(),Err.c_str(), + FailExtra.c_str()); // Dequeue FetchItem *Tmp = Queue; @@ -100,8 +108,9 @@ void pkgAcqMethod::Fail(string Err,bool Transient) QueueBack = Queue; } else - snprintf(S,sizeof(S),"400 URI Failure\nURI: \n" - "Message: %s\n",Err.c_str()); + snprintf(S,sizeof(S)-50,"400 URI Failure\nURI: \n" + "Message: %s %s\n",Err.c_str(), + FailExtra.c_str()); // Set the transient flag if (Transient == true) @@ -126,14 +135,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: %lu\n",Res.Size); + End += snprintf(End,sizeof(S)-4 - (End - S),"Size: %lu\n",Res.Size); if (Res.LastModified != 0) - End += snprintf(End,sizeof(S) - (End - S),"Last-Modified: %s\n", + End += snprintf(End,sizeof(S)-4 - (End - S),"Last-Modified: %s\n", TimeRFC1123(Res.LastModified).c_str()); if (Res.ResumePoint != 0) - End += snprintf(End,sizeof(S) - (End - S),"Resume-Point: %lu\n", + End += snprintf(End,sizeof(S)-4 - (End - S),"Resume-Point: %lu\n", Res.ResumePoint); strcat(End,"\n"); @@ -155,20 +164,20 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt) End += snprintf(S,sizeof(S),"201 URI Done\nURI: %s\n",Queue->Uri.c_str()); if (Res.Filename.empty() == false) - End += snprintf(End,sizeof(S) - (End - S),"Filename: %s\n",Res.Filename.c_str()); + End += snprintf(End,sizeof(S)-50 - (End - S),"Filename: %s\n",Res.Filename.c_str()); if (Res.Size != 0) - End += snprintf(End,sizeof(S) - (End - S),"Size: %lu\n",Res.Size); + End += snprintf(End,sizeof(S)-50 - (End - S),"Size: %lu\n",Res.Size); if (Res.LastModified != 0) - End += snprintf(End,sizeof(S) - (End - S),"Last-Modified: %s\n", + End += snprintf(End,sizeof(S)-50 - (End - S),"Last-Modified: %s\n", TimeRFC1123(Res.LastModified).c_str()); if (Res.MD5Sum.empty() == false) - End += snprintf(End,sizeof(S) - (End - S),"MD5-Hash: %s\n",Res.MD5Sum.c_str()); + End += snprintf(End,sizeof(S)-50 - (End - S),"MD5-Hash: %s\n",Res.MD5Sum.c_str()); if (Res.ResumePoint != 0) - End += snprintf(End,sizeof(S) - (End - S),"Resume-Point: %lu\n", + End += snprintf(End,sizeof(S)-50 - (End - S),"Resume-Point: %lu\n", Res.ResumePoint); if (Res.IMSHit == true) @@ -178,17 +187,17 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt) if (Alt != 0) { if (Alt->Filename.empty() == false) - End += snprintf(End,sizeof(S) - (End - S),"Alt-Filename: %s\n",Alt->Filename.c_str()); + End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-Filename: %s\n",Alt->Filename.c_str()); if (Alt->Size != 0) - End += snprintf(End,sizeof(S) - (End - S),"Alt-Size: %lu\n",Alt->Size); + End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-Size: %lu\n",Alt->Size); if (Alt->LastModified != 0) - End += snprintf(End,sizeof(S) - (End - S),"Alt-Last-Modified: %s\n", + End += snprintf(End,sizeof(S)-50 - (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-MD5-Hash: %s\n", + End += snprintf(End,sizeof(S)-50 - (End - S),"Alt-MD5-Hash: %s\n", Alt->MD5Sum.c_str()); if (Alt->IMSHit == true) @@ -309,10 +318,9 @@ int pkgAcqMethod::Run(bool Single) { if (Single == false) if (WaitFd(STDIN_FILENO) == false) - return 0; - + break; if (ReadMessages(STDIN_FILENO,Messages) == false) - return 0; + break; } // Single mode exits if the message queue is empty @@ -332,7 +340,7 @@ int pkgAcqMethod::Run(bool Single) } switch (Number) - { + { case 601: if (Configuration(Message) == false) return 100; @@ -365,6 +373,7 @@ int pkgAcqMethod::Run(bool Single) } } + Exit(); return 0; } /*}}}*/ @@ -382,10 +391,10 @@ void pkgAcqMethod::Log(const char *Format,...) // sprintf the description char S[1024]; - unsigned int Len = snprintf(S,sizeof(S),"101 Log\nURI: %s\n" + unsigned int Len = snprintf(S,sizeof(S)-4,"101 Log\nURI: %s\n" "Message: ",CurrentURI.c_str()); - vsnprintf(S+Len,sizeof(S)-Len,Format,args); + vsnprintf(S+Len,sizeof(S)-4-Len,Format,args); strcat(S,"\n\n"); if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S)) @@ -406,10 +415,10 @@ void pkgAcqMethod::Status(const char *Format,...) // sprintf the description char S[1024]; - unsigned int Len = snprintf(S,sizeof(S),"102 Status\nURI: %s\n" + unsigned int Len = snprintf(S,sizeof(S)-4,"102 Status\nURI: %s\n" "Message: ",CurrentURI.c_str()); - vsnprintf(S+Len,sizeof(S)-Len,Format,args); + vsnprintf(S+Len,sizeof(S)-4-Len,Format,args); strcat(S,"\n\n"); if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S)) @@ -425,4 +434,3 @@ pkgAcqMethod::FetchResult::FetchResult() : LastModified(0), { } /*}}}*/ -