diff options
Diffstat (limited to 'apt-pkg/deb')
-rw-r--r-- | apt-pkg/deb/dpkgpm.cc | 34 | ||||
-rw-r--r-- | apt-pkg/deb/dpkgpm.h | 4 |
2 files changed, 24 insertions, 14 deletions
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 2f84a5a87..e928776af 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -562,7 +562,7 @@ void pkgDPkgPM::DoDpkgStatusFd(int statusfd, int OutStatusFd) } /*}}}*/ // DPkgPM::WriteHistoryTag /*{{{*/ -void pkgDPkgPM::WriteHistoryTag(string tag, string value) +void pkgDPkgPM::WriteHistoryTag(FILE *history_out, string tag, string value) { if (value.size() > 0) { @@ -602,7 +602,7 @@ bool pkgDPkgPM::OpenLog() _config->Find("Dir::Log::History")); if (!history_name.empty()) { - history_out = fopen(history_name.c_str(),"a"); + FILE *history_out = fopen(history_name.c_str(),"a"); chmod(history_name.c_str(), 0644); fprintf(history_out, "\nStart-Date: %s\n", timestr); string remove, purge, install, upgrade, downgrade; @@ -622,12 +622,12 @@ bool pkgDPkgPM::OpenLog() remove += I.Name() + string(" (") + Cache[I].CurVersion + string("), "); } } - WriteHistoryTag("Install", install); - WriteHistoryTag("Upgrade", upgrade); - WriteHistoryTag("Downgrade",downgrade); - WriteHistoryTag("Remove",remove); - WriteHistoryTag("Purge",purge); - fflush(history_out); + WriteHistoryTag(history_out, "Install", install); + WriteHistoryTag(history_out, "Upgrade", upgrade); + WriteHistoryTag(history_out, "Downgrade",downgrade); + WriteHistoryTag(history_out, "Remove",remove); + WriteHistoryTag(history_out, "Purge",purge); + fclose(history_out); } return true; @@ -650,10 +650,11 @@ bool pkgDPkgPM::CloseLog() } term_out = NULL; - if(history_out) + string history_name = flCombine(_config->FindDir("Dir::Log"), + _config->Find("Dir::Log::History")); + if (!history_name.empty()) { - if (dpkg_error.size() > 0) - fprintf(history_out, "Error: %s\n", dpkg_error.c_str()); + FILE *history_out = fopen(history_name.c_str(),"a"); fprintf(history_out, "End-Date: %s\n", timestr); fclose(history_out); } @@ -1125,6 +1126,7 @@ bool pkgDPkgPM::Go(int OutStatusFd) if(stopOnError) RunScripts("DPkg::Post-Invoke"); + string dpkg_error; if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV) strprintf(dpkg_error, "Sub-process %s received a segmentation fault.",Args[0]); else if (WIFEXITED(Status) != 0) @@ -1133,7 +1135,17 @@ bool pkgDPkgPM::Go(int OutStatusFd) strprintf(dpkg_error, "Sub-process %s exited unexpectedly",Args[0]); if(dpkg_error.size() > 0) + { _error->Error(dpkg_error.c_str()); + string history_name = flCombine(_config->FindDir("Dir::Log"), + _config->Find("Dir::Log::History")); + if (!history_name.empty()) + { + FILE *history_out = fopen(history_name.c_str(),"a"); + fprintf(history_out, "Error: %s\n", dpkg_error.c_str()); + fclose(history_out); + } + } if(stopOnError) { diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h index ce3e20f2e..160486bf9 100644 --- a/apt-pkg/deb/dpkgpm.h +++ b/apt-pkg/deb/dpkgpm.h @@ -29,8 +29,6 @@ class pkgDPkgPM : public pkgPackageManager char dpkgbuf[1024]; int dpkgbuf_pos; FILE *term_out; - FILE *history_out; - string dpkg_error; protected: int pkgFailures; @@ -70,7 +68,7 @@ class pkgDPkgPM : public pkgPackageManager // Helpers bool RunScriptsWithPkgs(const char *Cnf); bool SendV2Pkgs(FILE *F); - void WriteHistoryTag(string tag, string value); + void WriteHistoryTag(FILE* history_out, string tag, string value); // apport integration void WriteApportReport(const char *pkgpath, const char *errormsg); |