summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorнаб <nabijaczleweli@nabijaczleweli.xyz>2024-11-11 16:30:40 +0100
committerнаб <nabijaczleweli@nabijaczleweli.xyz>2024-11-12 13:50:42 +0100
commit90d89c7c1a39aca33fad430f04e09b44d4b7319a (patch)
treee477f311798e11e66e7927843bb4af66aef7a964 /apt-pkg
parenta3fe93f15d0c3570a653bc50cf87dfd20c9bd671 (diff)
dpkgpm: use getline() for Apport var/crash lines
Also remove useless condition: sscanf() already direct-matches non-whitespace bytes
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/deb/dpkgpm.cc29
1 files changed, 11 insertions, 18 deletions
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 6b9b25e8b..65a3e9170 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -2382,30 +2382,25 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg)
reportfile = flCombine(_config->FindDir("Dir::Apport", "var/crash"), pkgname+".0.crash");
if(FileExists(reportfile))
{
- struct stat buf;
- char strbuf[255];
-
// check atime/mtime
+ struct stat buf{};
stat(reportfile.c_str(), &buf);
if(buf.st_mtime > buf.st_atime)
return;
+ char *line{};
+ size_t linelen;
+ AptScopeWrapper line_deleter{[&] { free(line); }};
// check if the existing report is the same version
report = fopen(reportfile.c_str(),"r");
- while(fgets(strbuf, sizeof(strbuf), report) != NULL)
+ AptScopeWrapper report_deleter{[&] { fclose(report); }};
+ while(getline(&line, &linelen, report) != -1)
{
- if(strstr(strbuf,"Package:") == strbuf)
- {
- char pkgname[255], version[255];
- if(sscanf(strbuf, "Package: %254s %254s", pkgname, version) == 2)
- if(strcmp(pkgver.c_str(), version) == 0)
- {
- fclose(report);
- return;
- }
- }
+ char pkgname[255], version[255];
+ if(sscanf(line, "Package: %254s %254s", pkgname, version) == 2)
+ if(strcmp(pkgver.c_str(), version) == 0)
+ return;
}
- fclose(report);
}
// now write the report
@@ -2413,6 +2408,7 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg)
report = fopen(reportfile.c_str(),"w");
if(report == NULL)
return;
+ AptScopeWrapper report_deleter{[&] { fclose(report); }};
if(_config->FindB("DPkgPM::InitialReportOnly",false) == true)
chmod(reportfile.c_str(), 0);
else
@@ -2467,8 +2463,5 @@ void pkgDPkgPM::WriteApportReport(const char *pkgpath, const char *errormsg)
// attach df -l log (to learn about filesystem status)
if (FileExists("/bin/df"))
CopyIndented("Df:\n", make_unique_popen("/bin/df -l -x squashfs","r").get(), report);
-
- fclose(report);
-
}
/*}}}*/