X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/b2e465d6d32d2dc884f58b94acb7e35f671a87fe..5e972bffae68a75aafc9f9b639e82e252fde3b8b:/apt-pkg/acquire-worker.cc?ds=sidebyside diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index 4805b5ebc..d06024178 100644 --- a/apt-pkg/acquire-worker.cc +++ b/apt-pkg/acquire-worker.cc @@ -1,6 +1,6 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acquire-worker.cc,v 1.32 2001/02/20 07:03:17 jgg Exp $ +// $Id: acquire-worker.cc,v 1.34 2001/05/22 04:42:54 jgg Exp $ /* ###################################################################### Acquire Worker @@ -23,6 +23,10 @@ #include #include + +#include +#include +#include #include #include @@ -32,6 +36,8 @@ #include /*}}}*/ +using namespace std; + // Worker::Worker - Constructor for Queue startup /*{{{*/ // --------------------------------------------------------------------- /* */ @@ -123,14 +129,11 @@ bool pkgAcquire::Worker::Start() // Fork off the process Process = ExecFork(); - - // Spawn the subprocess if (Process == 0) { // Setup the FDs dup2(Pipes[1],STDOUT_FILENO); dup2(Pipes[2],STDIN_FILENO); - dup2(((filebuf *)clog.rdbuf())->fd(),STDERR_FILENO); SetCloseExec(STDOUT_FILENO,false); SetCloseExec(STDIN_FILENO,false); SetCloseExec(STDERR_FILENO,false); @@ -365,11 +368,29 @@ bool pkgAcquire::Worker::Capabilities(string Message) /* */ bool pkgAcquire::Worker::MediaChange(string Message) { + int status_fd = _config->FindI("APT::Status-Fd",-1); + if(status_fd > 0) + { + string Media = LookupTag(Message,"Media"); + string Drive = LookupTag(Message,"Drive"); + ostringstream msg,status; + ioprintf(msg,_("Please insert the disc labeled: " + "'%s' " + "in the drive '%s' and press enter."), + Media.c_str(),Drive.c_str()); + status << "media-change: " // message + << Media << ":" // media + << Drive << ":" // drive + << msg.str() // l10n message + << endl; + write(status_fd, status.str().c_str(), status.str().size()); + } + if (Log == 0 || Log->MediaChange(LookupTag(Message,"Media"), LookupTag(Message,"Drive")) == false) { char S[300]; - sprintf(S,"603 Media Changed\nFailed: true\n\n"); + snprintf(S,sizeof(S),"603 Media Changed\nFailed: true\n\n"); if (Debug == true) clog << " -> " << Access << ':' << QuoteString(S,"\n") << endl; OutQueue += S; @@ -378,7 +399,7 @@ bool pkgAcquire::Worker::MediaChange(string Message) } char S[300]; - sprintf(S,"603 Media Changed\n\n"); + snprintf(S,sizeof(S),"603 Media Changed\n\n"); if (Debug == true) clog << " -> " << Access << ':' << QuoteString(S,"\n") << endl; OutQueue += S; @@ -464,7 +485,7 @@ bool pkgAcquire::Worker::OutFdReady() int Res; do { - Res = write(OutFd,OutQueue.begin(),OutQueue.length()); + Res = write(OutFd,OutQueue.c_str(),OutQueue.length()); } while (Res < 0 && errno == EINTR);