]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/deb/dpkgpm.cc
* apt-pkg/deb/dpkgpm.cc:
[apt.git] / apt-pkg / deb / dpkgpm.cc
index 90ae413f4ab9043c68385bcbec63634dcf00f4db..ff0a3c44345c34791dce7ea75ecfc7d732fac1df 100644 (file)
@@ -393,14 +393,14 @@ void pkgDPkgPM::ProcessDpkgStatusLine(int OutStatusFd, char *line)
    //        statusfd or by rewriting the code here to deal with
    //        it. for now we just ignore it and not crash
    TokSplitString(':', line, list, sizeof(list)/sizeof(list[0]));
-   char *pkg = list[1];
-   char *action = _strstrip(list[2]);
-   if( pkg == NULL || action == NULL) 
+   if( list[0] == NULL || list[1] == NULL || list[2] == NULL) 
    {
       if (_config->FindB("Debug::pkgDPkgProgressReporting",false) == true)
         std::clog << "ignoring line: not enough ':'" << std::endl;
       return;
    }
+   char *pkg = list[1];
+   char *action = _strstrip(list[2]);
 
    if(strncmp(action,"error",strlen("error")) == 0)
    {
@@ -572,17 +572,20 @@ bool pkgDPkgPM::Go(int OutStatusFd)
       { 
         {"unpacked",N_("Preparing to configure %s") },
         {"half-configured", N_("Configuring %s") },
+#if 0
         {"triggers-awaited", N_("Processing triggers for %s") },
         {"triggers-pending", N_("Processing triggers for %s") },
-        {"half-configured", N_("Configuring %s") },
+#endif
         { "installed", N_("Installed %s")},
         {NULL, NULL}
       },
       // Remove operation
       { 
         {"half-configured", N_("Preparing for removal of %s")},
+#if 0
         {"triggers-awaited", N_("Preparing for removal of %s")},
         {"triggers-pending", N_("Preparing for removal of %s")},
+#endif
         {"half-installed", N_("Removing %s")},
         {"config-files",  N_("Removed %s")},
         {NULL, NULL}
@@ -841,7 +844,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
         tv.tv_sec = 1;
         tv.tv_usec = 0;
         select_ret = select(max(master, _dpkgin)+1, &rfds, NULL, NULL, &tv);
-        if (select_ret == 0) 
+        if (select_ret == 0) 
            continue;
         else if (select_ret < 0 && errno == EINTR)
            continue;
@@ -850,7 +853,7 @@ bool pkgDPkgPM::Go(int OutStatusFd)
            perror("select() returned error");
            continue;
         } 
-
+        
         if(master >= 0 && FD_ISSET(master, &rfds))
            DoTerminalPty(master);
         if(master >= 0 && FD_ISSET(0, &rfds))
@@ -864,8 +867,11 @@ bool pkgDPkgPM::Go(int OutStatusFd)
       signal(SIGQUIT,old_SIGQUIT);
       signal(SIGINT,old_SIGINT);
 
-      if(master >= 0 && slave >= 0)
+      if(master >= 0) 
+      {
         tcsetattr(0, TCSAFLUSH, &tt);
+        close(master);
+      }
        
       // Check for an error code.
       if (WIFEXITED(Status) == 0 || WEXITSTATUS(Status) != 0)
@@ -935,9 +941,9 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg)
    if (Pkg.end() == true)
       return;
    pkgCache::VerIterator Ver = Cache.GetCandidateVer(Pkg);
-   pkgver = Ver.VerStr();
    if (Ver.end() == true)
       return;
+   pkgver = Ver.VerStr() == NULL ? "unknown" : Ver.VerStr();
    pkgRecords Recs(Cache);
    pkgRecords::Parser &Parse = Recs.Lookup(Ver.FileList());
    srcpkgname = Parse.SourcePkg();