diff options
author | David Kalnischkies <david@kalnischkies.de> | 2015-05-11 15:08:08 +0200 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2015-05-11 17:22:33 +0200 |
commit | 88593886a42025d51d76051da5929b044e42efee (patch) | |
tree | 6212ec08e3ac872573ca5faefb400a7914051bee /cmdline/apt-sortpkgs.cc | |
parent | 8d058ea53b18348f81229049a27d14282bd8d8c1 (diff) |
rewrite all TFRewrite instances to use the new pkgTagSection::Write
While it is mostly busywork to rewrite all instances it actually fixes
bugs as the data storage used by the new method is std::string rather
than a char*, the later mostly created by c_str() from a std::string
which the caller has to ensure keeps in scope – something apt-ftparchive
actually didn't ensure and relied on copy-on-write behavior instead
which c++11 forbids and hence the new default gcc abi doesn't use it.
Diffstat (limited to 'cmdline/apt-sortpkgs.cc')
-rw-r--r-- | cmdline/apt-sortpkgs.cc | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/cmdline/apt-sortpkgs.cc b/cmdline/apt-sortpkgs.cc index 971900e4f..12ef8dda0 100644 --- a/cmdline/apt-sortpkgs.cc +++ b/cmdline/apt-sortpkgs.cc @@ -108,8 +108,10 @@ static bool DoIt(string InFile) const char **Order = TFRewritePackageOrder; if (Source == true) Order = TFRewriteSourceOrder; - + // Emit + FileFd stdoutfd; + stdoutfd.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly, false); unsigned char *Buffer = new unsigned char[Largest+1]; for (vector<PkgName>::iterator I = List.begin(); I != List.end(); ++I) { @@ -119,8 +121,8 @@ static bool DoIt(string InFile) delete [] Buffer; return false; } - - Buffer[I->Length] = '\n'; + + Buffer[I->Length] = '\n'; if (Section.Scan((char *)Buffer,I->Length+1) == false) { delete [] Buffer; @@ -128,15 +130,13 @@ static bool DoIt(string InFile) } // Sort the section - if (TFRewrite(stdout,Section,Order,0) == false) + if (Section.Write(stdoutfd, Order) == false || stdoutfd.Write("\n", 1) == false) { delete [] Buffer; return _error->Error("Internal error, failed to sort fields"); } - - fputc('\n',stdout); } - + delete [] Buffer; return true; } |