summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-05-27 18:10:39 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2016-05-27 19:14:38 +0200
commitb58e2c7c56b1416a343e81f9f80cb1f02c128e25 (patch)
treedbd92b2a460c2dd5d2a4a9ccc5d80657b24b32c1
parent124e6916b7b02984803ff8217e8163947aae2882 (diff)
prevent C++ locale number formatting in text APIs
Setting the C++ locale via std::locale::global(std::locale("")); which would otherwise default to the default C locale (aka: unaffected by setlocale) effects the formatting of numeric types in IO streams, which for output for humans is perfectly sensible, but breaks our many text interfaces used and parsed by us and others without expecting the numbers to be formatted. Closes: #825396
-rw-r--r--apt-pkg/acquire-method.cc10
-rw-r--r--apt-pkg/acquire.cc10
-rw-r--r--apt-pkg/contrib/strutl.cc2
-rw-r--r--apt-pkg/deb/debindexfile.cc2
-rw-r--r--apt-pkg/install-progress.cc89
-rw-r--r--apt-private/private-install.cc2
-rw-r--r--apt-private/private-source.cc4
-rw-r--r--apt-private/private-update.cc4
-rw-r--r--cmdline/apt-helper.cc2
-rw-r--r--ftparchive/writer.cc6
-rw-r--r--methods/http.cc4
-rw-r--r--methods/server.cc2
-rwxr-xr-xtest/integration/test-apt-download-progress10
-rwxr-xr-xtest/integration/test-apt-progress-fd68
-rwxr-xr-xtest/integration/test-apt-progress-fd-deb82210
15 files changed, 98 insertions, 127 deletions
diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc
index d0eb01bbc..82f4b626d 100644
--- a/apt-pkg/acquire-method.cc
+++ b/apt-pkg/acquire-method.cc
@@ -145,13 +145,13 @@ void pkgAcqMethod::URIStart(FetchResult &Res)
std::cout << "200 URI Start\n"
<< "URI: " << Queue->Uri << "\n";
if (Res.Size != 0)
- std::cout << "Size: " << Res.Size << "\n";
+ std::cout << "Size: " << std::to_string(Res.Size) << "\n";
if (Res.LastModified != 0)
std::cout << "Last-Modified: " << TimeRFC1123(Res.LastModified) << "\n";
if (Res.ResumePoint != 0)
- std::cout << "Resume-Point: " << Res.ResumePoint << "\n";
+ std::cout << "Resume-Point: " << std::to_string(Res.ResumePoint) << "\n";
if (UsedMirror.empty() == false)
std::cout << "UsedMirror: " << UsedMirror << "\n";
@@ -184,7 +184,7 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
std::cout << "Filename: " << Res.Filename << "\n";
if (Res.Size != 0)
- std::cout << "Size: " << Res.Size << "\n";
+ std::cout << "Size: " << std::to_string(Res.Size) << "\n";
if (Res.LastModified != 0)
std::cout << "Last-Modified: " << TimeRFC1123(Res.LastModified) << "\n";
@@ -202,7 +202,7 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
}
if (Res.ResumePoint != 0)
- std::cout << "Resume-Point: " << Res.ResumePoint << "\n";
+ std::cout << "Resume-Point: " << std::to_string(Res.ResumePoint) << "\n";
if (Res.IMSHit == true)
std::cout << "IMS-Hit: true\n";
@@ -213,7 +213,7 @@ void pkgAcqMethod::URIDone(FetchResult &Res, FetchResult *Alt)
std::cout << "Alt-Filename: " << Alt->Filename << "\n";
if (Alt->Size != 0)
- std::cout << "Alt-Size: " << Alt->Size << "\n";
+ std::cout << "Alt-Size: " << std::to_string(Alt->Size) << "\n";
if (Alt->LastModified != 0)
std::cout << "Alt-Last-Modified: " << TimeRFC1123(Alt->LastModified) << "\n";
diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc
index ff41246b8..29362fb40 100644
--- a/apt-pkg/acquire.cc
+++ b/apt-pkg/acquire.cc
@@ -1258,13 +1258,9 @@ bool pkgAcquireStatus::Pulse(pkgAcquire *Owner)
snprintf(msg,sizeof(msg), _("Retrieving file %li of %li"), i, TotalItems);
// build the status str
- status << "dlstatus:" << i
- << ":" << std::setprecision(3) << Percent
- << ":" << msg
- << endl;
-
- std::string const dlstatus = status.str();
- FileFd::Write(fd, dlstatus.c_str(), dlstatus.size());
+ std::string dlstatus;
+ strprintf(dlstatus, "dlstatus:%ld:%.4f:%s\n", i, Percent, msg);
+ FileFd::Write(fd, dlstatus.data(), dlstatus.size());
}
return true;
diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc
index 24fca5174..96ea99147 100644
--- a/apt-pkg/contrib/strutl.cc
+++ b/apt-pkg/contrib/strutl.cc
@@ -1653,7 +1653,7 @@ URI::operator string()
Res << Host;
if (Port != 0)
- Res << ':' << Port;
+ Res << ':' << std::to_string(Port);
}
if (Path.empty() == false)
diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc
index 9be2db4c9..6a23b2c00 100644
--- a/apt-pkg/deb/debindexfile.cc
+++ b/apt-pkg/deb/debindexfile.cc
@@ -194,7 +194,7 @@ bool debDebPkgFileIndex::GetContent(std::ostream &content, std::string const &de
return _error->Error("Popen failed");
content << "Filename: " << debfile << "\n";
- content << "Size: " << Buf.st_size << "\n";
+ content << "Size: " << std::to_string(Buf.st_size) << "\n";
bool first_line_seen = false;
char buffer[1024];
do {
diff --git a/apt-pkg/install-progress.cc b/apt-pkg/install-progress.cc
index f1a9f42dc..c77c240c3 100644
--- a/apt-pkg/install-progress.cc
+++ b/apt-pkg/install-progress.cc
@@ -87,12 +87,10 @@ void PackageManagerProgressFd::StartDpkg()
fcntl(OutStatusFd,F_SETFD,FD_CLOEXEC);
// send status information that we are about to fork dpkg
- std::ostringstream status;
- status << "pmstatus:dpkg-exec:"
- << (StepsDone/float(StepsTotal)*100.0)
- << ":" << _("Running dpkg")
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "pmstatus:dpkg-exec:%.4f:%s\n",
+ (StepsDone/float(StepsTotal)*100.0), _("Running dpkg"));
+ WriteToStatusFd(std::move(status));
}
APT_CONST void PackageManagerProgressFd::Stop()
@@ -104,12 +102,10 @@ void PackageManagerProgressFd::Error(std::string PackageName,
unsigned int TotalSteps,
std::string ErrorMessage)
{
- std::ostringstream status;
- status << "pmerror:" << PackageName
- << ":" << (StepsDone/float(TotalSteps)*100.0)
- << ":" << ErrorMessage
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "pmerror:%s:%.4f:%s\n", PackageName.c_str(),
+ (StepsDone/float(TotalSteps)*100.0), ErrorMessage.c_str());
+ WriteToStatusFd(std::move(status));
}
void PackageManagerProgressFd::ConffilePrompt(std::string PackageName,
@@ -117,12 +113,10 @@ void PackageManagerProgressFd::ConffilePrompt(std::string PackageName,
unsigned int TotalSteps,
std::string ConfMessage)
{
- std::ostringstream status;
- status << "pmconffile:" << PackageName
- << ":" << (StepsDone/float(TotalSteps)*100.0)
- << ":" << ConfMessage
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "pmconffile:%s:%.4f:%s\n", PackageName.c_str(),
+ (StepsDone/float(TotalSteps)*100.0), ConfMessage.c_str());
+ WriteToStatusFd(std::move(status));
}
@@ -135,12 +129,10 @@ bool PackageManagerProgressFd::StatusChanged(std::string PackageName,
StepsTotal = xTotalSteps;
// build the status str
- std::ostringstream status;
- status << "pmstatus:" << StringSplit(PackageName, ":")[0]
- << ":" << (StepsDone/float(StepsTotal)*100.0)
- << ":" << pkg_action
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "pmstatus:%s:%.4f:%s\n", StringSplit(PackageName, ":")[0].c_str(),
+ (StepsDone/float(StepsTotal)*100.0), pkg_action.c_str());
+ WriteToStatusFd(std::move(status));
if(_config->FindB("Debug::APT::Progress::PackageManagerFd", false) == true)
std::cerr << "progress: " << PackageName << " " << xStepsDone
@@ -171,12 +163,10 @@ void PackageManagerProgressDeb822Fd::StartDpkg()
fcntl(OutStatusFd,F_SETFD,FD_CLOEXEC);
// send status information that we are about to fork dpkg
- std::ostringstream status;
- status << "Status: " << "progress" << std::endl
- << "Percent: " << (StepsDone/float(StepsTotal)*100.0) << std::endl
- << "Message: " << _("Running dpkg") << std::endl
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "Status: %s\nPercent: %.4f\nMessage: %s\n\n", "progress",
+ (StepsDone/float(StepsTotal)*100.0), _("Running dpkg"));
+ WriteToStatusFd(std::move(status));
}
APT_CONST void PackageManagerProgressDeb822Fd::Stop()
@@ -188,13 +178,10 @@ void PackageManagerProgressDeb822Fd::Error(std::string PackageName,
unsigned int TotalSteps,
std::string ErrorMessage)
{
- std::ostringstream status;
- status << "Status: " << "Error" << std::endl
- << "Package:" << PackageName << std::endl
- << "Percent: " << (StepsDone/float(TotalSteps)*100.0) << std::endl
- << "Message: " << ErrorMessage << std::endl
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "Status: %s\nPackage: %s\nPercent: %.4f\nMessage: %s\n\n", "Error",
+ PackageName.c_str(), (StepsDone/float(TotalSteps)*100.0), ErrorMessage.c_str());
+ WriteToStatusFd(std::move(status));
}
void PackageManagerProgressDeb822Fd::ConffilePrompt(std::string PackageName,
@@ -202,13 +189,10 @@ void PackageManagerProgressDeb822Fd::ConffilePrompt(std::string PackageName,
unsigned int TotalSteps,
std::string ConfMessage)
{
- std::ostringstream status;
- status << "Status: " << "ConfFile" << std::endl
- << "Package:" << PackageName << std::endl
- << "Percent: " << (StepsDone/float(TotalSteps)*100.0) << std::endl
- << "Message: " << ConfMessage << std::endl
- << std::endl;
- WriteToStatusFd(status.str());
+ std::string status;
+ strprintf(status, "Status: %s\nPackage: %s\nPercent: %.4f\nMessage: %s\n\n", "ConfFile",
+ PackageName.c_str(), (StepsDone/float(TotalSteps)*100.0), ConfMessage.c_str());
+ WriteToStatusFd(std::move(status));
}
@@ -220,15 +204,10 @@ bool PackageManagerProgressDeb822Fd::StatusChanged(std::string PackageName,
StepsDone = xStepsDone;
StepsTotal = xTotalSteps;
- // build the status str
- std::ostringstream status;
- status << "Status: " << "progress" << std::endl
- << "Package: " << PackageName << std::endl
- << "Percent: " << (StepsDone/float(StepsTotal)*100.0) << std::endl
- << "Message: " << message << std::endl
- << std::endl;
- WriteToStatusFd(status.str());
-
+ std::string status;
+ strprintf(status, "Status: %s\nPackage: %s\nPercent: %.4f\nMessage: %s\n\n", "progress",
+ PackageName.c_str(), (StepsDone/float(StepsTotal)*100.0), message.c_str());
+ WriteToStatusFd(std::move(status));
return true;
}
@@ -289,7 +268,7 @@ void PackageManagerFancy::SetupTerminalScrollArea(int nr_rows)
std::cout << "\0337";
// set scroll region (this will place the cursor in the top left)
- std::cout << "\033[0;" << nr_rows - 1 << "r";
+ std::cout << "\033[0;" << std::to_string(nr_rows - 1) << "r";
// restore cursor but ensure its inside the scrolling area
std::cout << "\0338";
@@ -390,7 +369,7 @@ bool PackageManagerFancy::DrawStatusLine()
std::cout << save_cursor
// move cursor position to last row
- << "\033[" << size.rows << ";0f"
+ << "\033[" << std::to_string(size.rows) << ";0f"
<< set_bg_color
<< set_fg_color
<< progress_str
diff --git a/apt-private/private-install.cc b/apt-private/private-install.cc
index 6c4b30da0..7bd9a6034 100644
--- a/apt-private/private-install.cc
+++ b/apt-private/private-install.cc
@@ -257,7 +257,7 @@ bool InstallPackages(CacheFile &Cache,bool ShwKept,bool Ask, bool Safety)
pkgAcquire::UriIterator I = Fetcher.UriBegin();
for (; I != Fetcher.UriEnd(); ++I)
std::cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' <<
- I->Owner->FileSize << ' ' << I->Owner->HashSum() << std::endl;
+ std::to_string(I->Owner->FileSize) << ' ' << I->Owner->HashSum() << std::endl;
return true;
}
diff --git a/apt-private/private-source.cc b/apt-private/private-source.cc
index 5053c60fc..dd52a8822 100644
--- a/apt-private/private-source.cc
+++ b/apt-private/private-source.cc
@@ -478,8 +478,8 @@ bool DoSource(CommandLine &CmdL)
{
pkgAcquire::UriIterator I = Fetcher.UriBegin();
for (; I != Fetcher.UriEnd(); ++I)
- std::cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' <<
- I->Owner->FileSize << ' ' << I->Owner->HashSum() << std::endl;
+ std::cout << '\'' << I->URI << "' " << flNotDir(I->Owner->DestFile) << ' ' <<
+ std::to_string(I->Owner->FileSize) << ' ' << I->Owner->HashSum() << std::endl;
return true;
}
diff --git a/apt-private/private-update.cc b/apt-private/private-update.cc
index 1e5d69512..ba953a088 100644
--- a/apt-private/private-update.cc
+++ b/apt-private/private-update.cc
@@ -58,8 +58,8 @@ bool DoUpdate(CommandLine &CmdL)
if(compExt.empty() == false &&
APT::String::Endswith(FileName, compExt))
FileName = FileName.substr(0, FileName.size() - compExt.size() - 1);
- c1out << '\'' << I->URI << "' " << FileName << ' ' <<
- I->Owner->FileSize << ' ' << I->Owner->HashSum() << std::endl;
+ c1out << '\'' << I->URI << "' " << FileName << ' ' <<
+ std::to_string(I->Owner->FileSize) << ' ' << I->Owner->HashSum() << std::endl;
}
return true;
}
diff --git a/cmdline/apt-helper.cc b/cmdline/apt-helper.cc
index b92055ab7..fd4d269c2 100644
--- a/cmdline/apt-helper.cc
+++ b/cmdline/apt-helper.cc
@@ -102,7 +102,7 @@ static bool DoSrvLookup(CommandLine &CmdL) /*{{{*/
_error->Error(_("GetSrvRec failed for %s"), name.c_str());
for (SrvRec const &I : srv_records)
- c1out << I.target << "\t" << I.priority << "\t" << I.weight << "\t" << I.port << std::endl;
+ ioprintf(c1out, "%s\t%d\t%d\t%d\n", I.target.c_str(), I.priority, I.weight, I.port);
}
return true;
}
diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc
index d4b46042f..65b0f8553 100644
--- a/ftparchive/writer.cc
+++ b/ftparchive/writer.cc
@@ -623,12 +623,12 @@ SourcesWriter::SourcesWriter(FileFd * const GivenOutput, string const &DB, strin
// SourcesWriter::DoPackage - Process a single package /*{{{*/
static std::string getDscHash(unsigned int const DoHashes,
Hashes::SupportedHashes const DoIt, pkgTagSection &Tags, char const * const FieldName,
- HashString const * const Hash, unsigned long long Size, std::string FileName)
+ HashString const * const Hash, unsigned long long Size, std::string const &FileName)
{
if ((DoHashes & DoIt) != DoIt || Tags.Exists(FieldName) == false || Hash == NULL)
return "";
std::ostringstream out;
- out << "\n " << Hash->HashValue() << " " << Size << " " << FileName
+ out << "\n " << Hash->HashValue() << " " << std::to_string(Size) << " " << FileName
<< "\n " << Tags.FindS(FieldName);
return out.str();
}
@@ -802,7 +802,7 @@ bool SourcesWriter::DoPackage(string FileName)
if (Tags.Exists(fieldname) == true)
continue;
std::ostringstream streamout;
- streamout << "\n " << hs->HashValue() << " " << Db.GetFileSize() << " " << ParseJnk;
+ streamout << "\n " << hs->HashValue() << " " << std::to_string(Db.GetFileSize()) << " " << ParseJnk;
out->append(streamout.str());
}
diff --git a/methods/http.cc b/methods/http.cc
index 78b20e66d..0c3803fbb 100644
--- a/methods/http.cc
+++ b/methods/http.cc
@@ -708,7 +708,7 @@ void HttpMethod::SendReq(FetchItem *Itm)
C.f. https://tools.ietf.org/wg/httpbis/trac/ticket/158 */
Req << "GET " << requesturi << " HTTP/1.1\r\n";
if (Uri.Port != 0)
- Req << "Host: " << ProperHost << ":" << Uri.Port << "\r\n";
+ Req << "Host: " << ProperHost << ":" << std::to_string(Uri.Port) << "\r\n";
else
Req << "Host: " << ProperHost << "\r\n";
@@ -717,7 +717,7 @@ void HttpMethod::SendReq(FetchItem *Itm)
Req << "Cache-Control: no-cache\r\n"
<< "Pragma: no-cache\r\n";
else if (Itm->IndexFile == true)
- Req << "Cache-Control: max-age=" << _config->FindI("Acquire::http::Max-Age",0) << "\r\n";
+ Req << "Cache-Control: max-age=" << std::to_string(_config->FindI("Acquire::http::Max-Age",0)) << "\r\n";
else if (_config->FindB("Acquire::http::No-Store",false) == true)
Req << "Cache-Control: no-store\r\n";
diff --git a/methods/server.cc b/methods/server.cc
index b323ef4f3..d606f26aa 100644
--- a/methods/server.cc
+++ b/methods/server.cc
@@ -130,7 +130,7 @@ bool ServerState::HeaderLine(string Line)
{
Code[0] = '\0';
if (Owner != NULL && Owner->Debug == true)
- clog << "HTTP server doesn't give Reason-Phrase for " << Result << std::endl;
+ clog << "HTTP server doesn't give Reason-Phrase for " << std::to_string(Result) << std::endl;
}
else if (elements != 4)
return _error->Error(_("The HTTP server sent an invalid reply header"));
diff --git a/test/integration/test-apt-download-progress b/test/integration/test-apt-download-progress
index b48e7ebb3..7ac044a57 100755
--- a/test/integration/test-apt-download-progress
+++ b/test/integration/test-apt-download-progress
@@ -11,13 +11,9 @@ setupenvironment
changetohttpswebserver
assertprogress() {
- T="$1"
- testsuccess grep "dlstatus:1:0:Retrieving file 1 of 1" "$T"
- if ! grep -E -q "dlstatus:1:(0\..*|([1-9](\..*)?)|[1-9][0-9](\..*)?):Retrieving file 1 of 1" "$T"; then
- cat "$T"
- msgfail "Failed to detect download progress"
- fi
- testsuccess grep "dlstatus:1:100:Retrieving file 1 of 1" "$T"
+ testsuccess grep "dlstatus:1:0.0000:Retrieving file 1 of 1" "$1"
+ testsuccess grep -E "dlstatus:1:[1-9][0-9]{0,1}\.[0-9]{1,4}:Retrieving file 1 of 1" "$1"
+ testsuccess grep "dlstatus:1:100.0000:Retrieving file 1 of 1" "$1"
}
# we need to ensure the file is reasonable big so that apt has a chance to
diff --git a/test/integration/test-apt-progress-fd b/test/integration/test-apt-progress-fd
index c6650bc2e..86eaa1354 100755
--- a/test/integration/test-apt-progress-fd
+++ b/test/integration/test-apt-progress-fd
@@ -15,15 +15,15 @@ setupaptarchive
# install native
exec 3> apt-progress.log
testsuccess aptget install testing=0.1 -y -o APT::Status-Fd=3
-testfileequal './apt-progress.log' 'dlstatus:1:0:Retrieving file 1 of 1
-dlstatus:1:100:Retrieving file 1 of 1
-pmstatus:dpkg-exec:0:Running dpkg
-pmstatus:testing:0:Installing testing (amd64)
+testfileequal './apt-progress.log' 'dlstatus:1:0.0000:Retrieving file 1 of 1
+dlstatus:1:100.0000:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing:0.0000:Installing testing (amd64)
pmstatus:testing:16.6667:Preparing testing (amd64)
pmstatus:testing:33.3333:Unpacking testing (amd64)
-pmstatus:testing:50:Preparing to configure testing (amd64)
-pmstatus:dpkg-exec:50:Running dpkg
-pmstatus:testing:50:Configuring testing (amd64)
+pmstatus:testing:50.0000:Preparing to configure testing (amd64)
+pmstatus:dpkg-exec:50.0000:Running dpkg
+pmstatus:testing:50.0000:Configuring testing (amd64)
pmstatus:testing:66.6667:Configuring testing (amd64)
pmstatus:testing:83.3333:Installed testing (amd64)
pmstatus:dpkg-exec:83.3333:Running dpkg'
@@ -31,15 +31,15 @@ pmstatus:dpkg-exec:83.3333:Running dpkg'
# upgrade
exec 3> apt-progress.log
testsuccess aptget install testing=0.8.15 -y -o APT::Status-Fd=3
-testfileequal './apt-progress.log' 'dlstatus:1:0:Retrieving file 1 of 1
-dlstatus:1:100:Retrieving file 1 of 1
-pmstatus:dpkg-exec:0:Running dpkg
-pmstatus:testing:0:Installing testing (amd64)
+testfileequal './apt-progress.log' 'dlstatus:1:0.0000:Retrieving file 1 of 1
+dlstatus:1:100.0000:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing:0.0000:Installing testing (amd64)
pmstatus:testing:16.6667:Preparing testing (amd64)
pmstatus:testing:33.3333:Unpacking testing (amd64)
-pmstatus:testing:50:Preparing to configure testing (amd64)
-pmstatus:dpkg-exec:50:Running dpkg
-pmstatus:testing:50:Configuring testing (amd64)
+pmstatus:testing:50.0000:Preparing to configure testing (amd64)
+pmstatus:dpkg-exec:50.0000:Running dpkg
+pmstatus:testing:50.0000:Configuring testing (amd64)
pmstatus:testing:66.6667:Configuring testing (amd64)
pmstatus:testing:83.3333:Installed testing (amd64)
pmstatus:dpkg-exec:83.3333:Running dpkg'
@@ -47,15 +47,15 @@ pmstatus:dpkg-exec:83.3333:Running dpkg'
# reinstall
exec 3> apt-progress.log
testsuccess aptget install testing=0.8.15 --reinstall -y -o APT::Status-Fd=3
-testfileequal './apt-progress.log' 'dlstatus:1:0:Retrieving file 1 of 1
-dlstatus:1:100:Retrieving file 1 of 1
-pmstatus:dpkg-exec:0:Running dpkg
-pmstatus:testing:0:Installing testing (amd64)
+testfileequal './apt-progress.log' 'dlstatus:1:0.0000:Retrieving file 1 of 1
+dlstatus:1:100.0000:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing:0.0000:Installing testing (amd64)
pmstatus:testing:16.6667:Preparing testing (amd64)
pmstatus:testing:33.3333:Unpacking testing (amd64)
-pmstatus:testing:50:Preparing to configure testing (amd64)
-pmstatus:dpkg-exec:50:Running dpkg
-pmstatus:testing:50:Configuring testing (amd64)
+pmstatus:testing:50.0000:Preparing to configure testing (amd64)
+pmstatus:dpkg-exec:50.0000:Running dpkg
+pmstatus:testing:50.0000:Configuring testing (amd64)
pmstatus:testing:66.6667:Configuring testing (amd64)
pmstatus:testing:83.3333:Installed testing (amd64)
pmstatus:dpkg-exec:83.3333:Running dpkg'
@@ -63,25 +63,25 @@ pmstatus:dpkg-exec:83.3333:Running dpkg'
# and remove
exec 3> apt-progress.log
testsuccess aptget remove testing -y -o APT::Status-Fd=3
-testfileequal './apt-progress.log' 'pmstatus:dpkg-exec:0:Running dpkg
-pmstatus:testing:0:Removing testing (amd64)
-pmstatus:testing:25:Preparing for removal of testing (amd64)
-pmstatus:testing:50:Removing testing (amd64)
-pmstatus:testing:75:Removed testing (amd64)
-pmstatus:dpkg-exec:75:Running dpkg'
+testfileequal './apt-progress.log' 'pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing:0.0000:Removing testing (amd64)
+pmstatus:testing:25.0000:Preparing for removal of testing (amd64)
+pmstatus:testing:50.0000:Removing testing (amd64)
+pmstatus:testing:75.0000:Removed testing (amd64)
+pmstatus:dpkg-exec:75.0000:Running dpkg'
# install non-native and ensure we get proper progress info
exec 3> apt-progress.log
testsuccess aptget install testing2:i386 -y -o APT::Status-Fd=3
-testfileequal './apt-progress.log' 'dlstatus:1:0:Retrieving file 1 of 1
-dlstatus:1:100:Retrieving file 1 of 1
-pmstatus:dpkg-exec:0:Running dpkg
-pmstatus:testing2:0:Installing testing2 (i386)
+testfileequal './apt-progress.log' 'dlstatus:1:0.0000:Retrieving file 1 of 1
+dlstatus:1:100.0000:Retrieving file 1 of 1
+pmstatus:dpkg-exec:0.0000:Running dpkg
+pmstatus:testing2:0.0000:Installing testing2 (i386)
pmstatus:testing2:16.6667:Preparing testing2 (i386)
pmstatus:testing2:33.3333:Unpacking testing2 (i386)
-pmstatus:testing2:50:Preparing to configure testing2 (i386)
-pmstatus:dpkg-exec:50:Running dpkg
-pmstatus:testing2:50:Configuring testing2 (i386)
+pmstatus:testing2:50.0000:Preparing to configure testing2 (i386)
+pmstatus:dpkg-exec:50.0000:Running dpkg
+pmstatus:testing2:50.0000:Configuring testing2 (i386)
pmstatus:testing2:66.6667:Configuring testing2 (i386)
pmstatus:testing2:83.3333:Installed testing2 (i386)
pmstatus:dpkg-exec:83.3333:Running dpkg'
diff --git a/test/integration/test-apt-progress-fd-deb822 b/test/integration/test-apt-progress-fd-deb822
index 58fd73275..a8d59608d 100755
--- a/test/integration/test-apt-progress-fd-deb822
+++ b/test/integration/test-apt-progress-fd-deb822
@@ -17,12 +17,12 @@ exec 3> apt-progress.log
testsuccess aptget install testing=0.1 -y -o APT::Status-deb822-Fd=3
testfileequal './apt-progress.log' 'Status: progress
-Percent: 0
+Percent: 0.0000
Message: Running dpkg
Status: progress
Package: testing:amd64
-Percent: 0
+Percent: 0.0000
Message: Installing testing (amd64)
Status: progress
@@ -37,16 +37,16 @@ Message: Unpacking testing (amd64)
Status: progress
Package: testing:amd64
-Percent: 50
+Percent: 50.0000
Message: Preparing to configure testing (amd64)
Status: progress
-Percent: 50
+Percent: 50.0000
Message: Running dpkg
Status: progress
Package: testing:amd64
-Percent: 50
+Percent: 50.0000
Message: Configuring testing (amd64)
Status: progress