summaryrefslogtreecommitdiff
path: root/apt-pkg/deb
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2018-04-11 12:39:40 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2018-05-11 17:58:46 +0200
commit117ab302176a65536d9d55de30c53e94f08057ae (patch)
tree892c5f7751709ba1c82b0882d720064e0f29d94c /apt-pkg/deb
parentce9223cc4e4ffcc43d17ae97ff8c57fb759a2c49 (diff)
Start pkg records for deb files with dpkg output
It is easier to prepend our fields, but that results in confusion for things working on the so generated records as they don't start with the usual "Package" – that shouldn't be a problem in theory, but in practice e.g. "apt-cache show" shows these records directly to the user who will probably be more confused by it than tools.
Diffstat (limited to 'apt-pkg/deb')
-rw-r--r--apt-pkg/deb/debindexfile.cc26
1 files changed, 10 insertions, 16 deletions
diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc
index 10ebd1d3e..f7e3c7a5c 100644
--- a/apt-pkg/deb/debindexfile.cc
+++ b/apt-pkg/deb/debindexfile.cc
@@ -185,28 +185,22 @@ bool debDebPkgFileIndex::GetContent(std::ostream &content, std::string const &de
if(Popen((const char**)&Args[0], PipeFd, Child, FileFd::ReadOnly) == false)
return _error->Error("Popen failed");
- content << "Filename: " << debfile << "\n";
- content << "Size: " << std::to_string(Buf.st_size) << "\n";
+ std::string line;
bool first_line_seen = false;
- char buffer[1024];
- do {
- unsigned long long actual = 0;
- if (PipeFd.Read(buffer, sizeof(buffer)-1, &actual) == false)
- return _error->Errno("read", "Failed to read dpkg pipe");
- if (actual == 0)
- break;
- buffer[actual] = '\0';
- char const * b = buffer;
+ while (PipeFd.ReadLine(line))
+ {
if (first_line_seen == false)
{
- for (; *b != '\0' && (*b == '\n' || *b == '\r'); ++b)
- /* skip over leading newlines */;
- if (*b == '\0')
+ if (line.empty())
continue;
first_line_seen = true;
}
- content << b;
- } while(true);
+ else if (line.empty())
+ break;
+ content << line << "\n";
+ }
+ content << "Filename: " << debfile << "\n";
+ content << "Size: " << std::to_string(Buf.st_size) << "\n";
ExecWait(Child, "Popen");
return true;