summaryrefslogtreecommitdiff
path: root/apt-pkg
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 /apt-pkg
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
Diffstat (limited to 'apt-pkg')
-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
5 files changed, 44 insertions, 69 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