]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/deb/dpkgpm.cc
* merged changes from the conference
[apt.git] / apt-pkg / deb / dpkgpm.cc
index ea64ef0891cb9260c85e523b25ef7d350b5b7963..85d46edbad1ded32bb30e8e71688720326f9fce7 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: dpkgpm.cc,v 1.26 2003/04/27 03:02:40 doogie Exp $
+// $Id: dpkgpm.cc,v 1.28 2004/01/27 02:25:01 mdz Exp $
 /* ######################################################################
 
    DPKG Package Manager - Provide an interface to dpkg
@@ -328,8 +328,8 @@ bool pkgDPkgPM::RunScriptsWithPkgs(const char *Cnf)
 /* This globs the operations and calls dpkg */
 bool pkgDPkgPM::Go()
 {
-   unsigned int MaxArgs = _config->FindI("Dpkg::MaxArgs",350);   
-   unsigned int MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",8192);
+   unsigned int MaxArgs = _config->FindI("Dpkg::MaxArgs",8*1024);   
+   unsigned int MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",32*1024);
 
    if (RunScripts("DPkg::Pre-Invoke") == false)
       return false;
@@ -436,8 +436,8 @@ bool pkgDPkgPM::Go()
          it forks scripts. What happens is that when you hit ctrl-c it sends
         it to all processes in the group. Since dpkg ignores the signal 
         it doesn't die but we do! So we must also ignore it */
-      signal(SIGQUIT,SIG_IGN);
-      signal(SIGINT,SIG_IGN);
+      sighandler_t old_SIGQUIT = signal(SIGQUIT,SIG_IGN);
+      sighandler_t old_SIGINT = signal(SIGINT,SIG_IGN);
                     
       // Fork dpkg
       pid_t Child = ExecFork();
@@ -448,7 +448,7 @@ bool pkgDPkgPM::Go()
         if (chdir(_config->FindDir("DPkg::Run-Directory","/").c_str()) != 0)
            _exit(100);
         
-        if (_config->FindB("DPkg::FlushSTDIN",true) == true)
+        if (_config->FindB("DPkg::FlushSTDIN",true) == true && isatty(STDIN_FILENO))
         {
            int Flags,dummy;
            if ((Flags = fcntl(STDIN_FILENO,F_GETFL,dummy)) < 0)
@@ -479,12 +479,16 @@ bool pkgDPkgPM::Go()
         if (errno == EINTR)
            continue;
         RunScripts("DPkg::Post-Invoke");
+
+         // Restore sig int/quit
+         signal(SIGQUIT,old_SIGQUIT);
+         signal(SIGINT,old_SIGINT);
         return _error->Errno("waitpid","Couldn't wait for subprocess");
       }
 
       // Restore sig int/quit
-      signal(SIGQUIT,SIG_DFL);
-      signal(SIGINT,SIG_DFL);
+      signal(SIGQUIT,old_SIGQUIT);
+      signal(SIGINT,old_SIGINT);
        
       // Check for an error code.
       if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)