]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/deb/dpkgpm.cc
* doc/examples/configure-index:
[apt.git] / apt-pkg / deb / dpkgpm.cc
index fe8fbca748b5fc05b63bda2be3ff86881983a58a..fe13614c51f71ccf318ede977d5d897e92fba22e 100644 (file)
@@ -16,6 +16,7 @@
 #include <apt-pkg/configuration.h>
 #include <apt-pkg/depcache.h>
 #include <apt-pkg/strutl.h>
+#include <apt-pkg/fileutl.h>
 
 #include <unistd.h>
 #include <stdlib.h>
@@ -93,60 +94,7 @@ bool pkgDPkgPM::Remove(PkgIterator Pkg,bool Purge)
    each one is run with system from a forked child. */
 bool pkgDPkgPM::RunScripts(const char *Cnf)
 {
-   Configuration::Item const *Opts = _config->Tree(Cnf);
-   if (Opts == 0 || Opts->Child == 0)
-      return true;
-   Opts = Opts->Child;
-
-   // Fork for running the system calls
-   pid_t Child = ExecFork();
-   
-   // This is the child
-   if (Child == 0)
-   {
-      if (chdir("/tmp/") != 0)
-        _exit(100);
-        
-      unsigned int Count = 1;
-      for (; Opts != 0; Opts = Opts->Next, Count++)
-      {
-        if (Opts->Value.empty() == true)
-           continue;
-        
-        if (system(Opts->Value.c_str()) != 0)
-           _exit(100+Count);
-      }
-      _exit(0);
-   }      
-
-   // Wait for the child
-   int Status = 0;
-   while (waitpid(Child,&Status,0) != Child)
-   {
-      if (errno == EINTR)
-        continue;
-      return _error->Errno("waitpid","Couldn't wait for subprocess");
-   }
-
-   // Restore sig int/quit
-   signal(SIGQUIT,SIG_DFL);
-   signal(SIGINT,SIG_DFL);   
-
-   // Check for an error code.
-   if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
-   {
-      unsigned int Count = WEXITSTATUS(Status);
-      if (Count > 100)
-      {
-        Count -= 100;
-        for (; Opts != 0 && Count != 1; Opts = Opts->Next, Count--);
-        _error->Error("Problem executing scripts %s '%s'",Cnf,Opts->Value.c_str());
-      }
-      
-      return _error->Error("Sub-process returned an error code");
-   }
-   
-   return true;
+   RunScripts(Cnf);
 }
                                                                         /*}}}*/
 // DPkgPM::SendV2Pkgs - Send version 2 package info                    /*{{{*/
@@ -375,8 +323,8 @@ bool pkgDPkgPM::Go(int OutStatusFd)
       },
       // Purge operation
       { 
-        {"config-files", _("Preparing for remove with config %s")},
-        {"not-installed", _("Removed with config %s")},
+        {"config-files", _("Preparing to completely remove %s")},
+        {"not-installed", _("Completely removed %s")},
         {NULL, NULL}
       },
    };
@@ -623,8 +571,8 @@ bool pkgDPkgPM::Go(int OutStatusFd)
            'status: conffile-prompt: conffile : 'current-conffile' 'new-conffile' useredited distedited
            
         */
-        char* list[4];
-        TokSplitString(':', line, list, 5);
+        char* list[5];
+        TokSplitString(':', line, list, sizeof(list)/sizeof(list[0]));
         char *pkg = list[1];
         char *action = _strstrip(list[2]);