X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/249aec3b7397662a678ea0014f94392085477b09..c1553e72c6728572b06dc32395a994d5bfdc8e23:/cmdline/apt-sortpkgs.cc diff --git a/cmdline/apt-sortpkgs.cc b/cmdline/apt-sortpkgs.cc index 971900e4f..cde3069bd 100644 --- a/cmdline/apt-sortpkgs.cc +++ b/cmdline/apt-sortpkgs.cc @@ -30,6 +30,7 @@ #include #include #include +#include #include /*}}}*/ @@ -108,36 +109,25 @@ static bool DoIt(string InFile) const char **Order = TFRewritePackageOrder; if (Source == true) Order = TFRewriteSourceOrder; - + // Emit - unsigned char *Buffer = new unsigned char[Largest+1]; + FileFd stdoutfd; + stdoutfd.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly, false); + auto const Buffer = std::unique_ptr(new unsigned char[Largest+1]); for (vector::iterator I = List.begin(); I != List.end(); ++I) { // Read in the Record. - if (Fd.Seek(I->Offset) == false || Fd.Read(Buffer,I->Length) == false) - { - delete [] Buffer; + if (Fd.Seek(I->Offset) == false || Fd.Read(Buffer.get(),I->Length) == false) return false; - } - - Buffer[I->Length] = '\n'; - if (Section.Scan((char *)Buffer,I->Length+1) == false) - { - delete [] Buffer; + + Buffer[I->Length] = '\n'; + if (Section.Scan((char *)Buffer.get(),I->Length+1) == false) return _error->Error("Internal error, failed to scan buffer"); - } // Sort the section - if (TFRewrite(stdout,Section,Order,0) == false) - { - delete [] Buffer; + if (Section.Write(stdoutfd, Order) == false || stdoutfd.Write("\n", 1) == false) return _error->Error("Internal error, failed to sort fields"); - } - - fputc('\n',stdout); } - - delete [] Buffer; return true; } /*}}}*/