summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2024-11-11 15:28:27 +0000
committerJulian Andres Klode <jak@debian.org>2024-11-11 15:28:27 +0000
commitaefccbe09722c6a7a0911cb882622c96215eeec2 (patch)
treee19e12bd61ba8767915604129831948184532f7b /apt-pkg
parentf4e0e9daf221e840e122b0ffa97007aa512020a6 (diff)
parentd20575e93c38afb15fbc3e3bfc5e0e6a3903c299 (diff)
Merge branch 'stdarray' into 'main'
Fold char[APT_BUFFER_SIZE] and unique_ptr<char, APT_BUFFER_SIZE> into std::array<char, APT_BUFFER_SIZE> See merge request apt-team/apt!386
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/contrib/extracttar.cc10
-rw-r--r--apt-pkg/contrib/fileutl.cc42
-rw-r--r--apt-pkg/contrib/hashes.cc17
3 files changed, 34 insertions, 35 deletions
diff --git a/apt-pkg/contrib/extracttar.cc b/apt-pkg/contrib/extracttar.cc
index dff9326a1..7b545de17 100644
--- a/apt-pkg/contrib/extracttar.cc
+++ b/apt-pkg/contrib/extracttar.cc
@@ -132,7 +132,7 @@ bool ExtractTar::Go(pkgDirStream &Stream)
// Loop over all blocks
string LastLongLink, ItemLink;
string LastLongName, ItemName;
- auto Junk = std::make_unique<std::array<unsigned char, 32*1024>>();
+ std::array<unsigned char, APT_BUFFER_SIZE> Junk;
while (1)
{
bool BadRecord = false;
@@ -295,19 +295,19 @@ bool ExtractTar::Go(pkgDirStream &Stream)
auto Size = Itm.Size;
do
{
- auto const Read = std::min<unsigned long long>(Size, Junk->size());
- if (not InFd.Read(Junk->data(), ((Read + (sizeof(Block) - 1)) / sizeof(Block)) * sizeof(Block)))
+ auto const Read = std::min<unsigned long long>(Size, Junk.size());
+ if (not InFd.Read(Junk.data(), ((Read + (sizeof(Block) - 1)) / sizeof(Block)) * sizeof(Block)))
return false;
if (Fd > 0)
{
- if (not FileFd::Write(Fd, Junk->data(), Read))
+ if (not FileFd::Write(Fd, Junk.data(), Read))
return Stream.Fail(Itm, Fd);
}
// An Fd of -2 means to send to a special processing function
else if (Fd == -2)
{
- if (not Stream.Process(Itm, Junk->data(), Read, Itm.Size - Size))
+ if (not Stream.Process(Itm, Junk.data(), Read, Itm.Size - Size))
return Stream.Fail(Itm, Fd);
}
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
index 4ad7b4cd5..957d068de 100644
--- a/apt-pkg/contrib/fileutl.cc
+++ b/apt-pkg/contrib/fileutl.cc
@@ -59,6 +59,7 @@
#include <unistd.h>
#include <algorithm>
+#include <array>
#include <memory>
#include <set>
@@ -175,12 +176,11 @@ bool CopyFile(FileFd &From,FileFd &To)
return false;
// Buffered copy between fds
- constexpr size_t BufSize = APT_BUFFER_SIZE;
- std::unique_ptr<unsigned char[]> Buf(new unsigned char[BufSize]);
+ std::array<unsigned char, APT_BUFFER_SIZE> Buf;
unsigned long long ToRead = 0;
do {
- if (From.Read(Buf.get(),BufSize, &ToRead) == false ||
- To.Write(Buf.get(),ToRead) == false)
+ if (From.Read(Buf.data(),Buf.size(), &ToRead) == false ||
+ To.Write(Buf.data(),ToRead) == false)
return false;
} while (ToRead != 0);
@@ -1246,12 +1246,11 @@ public:
}
virtual bool InternalSkip(unsigned long long Over)
{
- unsigned long long constexpr buffersize = APT_BUFFER_SIZE;
- char buffer[buffersize];
+ std::array<char, APT_BUFFER_SIZE> buffer;
while (Over != 0)
{
- unsigned long long toread = std::min(buffersize, Over);
- if (filefd->Read(buffer, toread) == false)
+ auto toread = std::min<unsigned long long>(buffer.size(), Over);
+ if (filefd->Read(buffer.data(), toread) == false)
return filefd->FileFdError("Unable to seek ahead %llu",Over);
Over -= toread;
}
@@ -1273,10 +1272,10 @@ public:
{
unsigned long long size = 0;
unsigned long long const oldSeek = filefd->Tell();
- char ignore[APT_BUFFER_SIZE];
+ std::array<char, APT_BUFFER_SIZE> ignore;
unsigned long long read = 0;
do {
- if (filefd->Read(ignore, sizeof(ignore), &read) == false)
+ if (filefd->Read(ignore.data(), ignore.size(), &read) == false)
{
filefd->Seek(oldSeek);
return 0;
@@ -1994,7 +1993,7 @@ class APT_HIDDEN LzmaFileFdPrivate: public FileFdPrivate { /*{{{*/
struct LZMAFILE {
FILE* file;
FileFd * const filefd;
- uint8_t buffer[APT_BUFFER_SIZE];
+ std::array<unsigned char, APT_BUFFER_SIZE> buffer;
lzma_stream stream;
lzma_ret err;
bool eof;
@@ -2005,19 +2004,18 @@ class APT_HIDDEN LzmaFileFdPrivate: public FileFdPrivate { /*{{{*/
{
if (compressing == true && filefd->Failed() == false)
{
- size_t constexpr buffersize = sizeof(buffer)/sizeof(buffer[0]);
while(true)
{
- stream.avail_out = buffersize;
- stream.next_out = buffer;
+ stream.avail_out = buffer.size();
+ stream.next_out = buffer.data();
err = lzma_code(&stream, LZMA_FINISH);
if (err != LZMA_OK && err != LZMA_STREAM_END)
{
_error->Error("~LZMAFILE: Compress finalisation failed");
break;
}
- size_t const n = buffersize - stream.avail_out;
- if (n && fwrite(buffer, 1, n, file) != n)
+ size_t const n = buffer.size() - stream.avail_out;
+ if (n && fwrite(buffer.data(), 1, n, file) != n)
{
_error->Errno("~LZMAFILE",_("Write error"));
break;
@@ -2112,8 +2110,8 @@ public:
lzma->stream.avail_out = Size;
if (lzma->stream.avail_in == 0)
{
- lzma->stream.next_in = lzma->buffer;
- lzma->stream.avail_in = fread(lzma->buffer, 1, sizeof(lzma->buffer)/sizeof(lzma->buffer[0]), lzma->file);
+ lzma->stream.next_in = lzma->buffer.data();
+ lzma->stream.avail_in = fread(lzma->buffer.data(), 1, lzma->buffer.size(), lzma->file);
}
lzma->err = lzma_code(&lzma->stream, LZMA_RUN);
if (lzma->err == LZMA_STREAM_END)
@@ -2147,13 +2145,13 @@ public:
ssize_t Res;
lzma->stream.next_in = (uint8_t *)From;
lzma->stream.avail_in = Size;
- lzma->stream.next_out = lzma->buffer;
- lzma->stream.avail_out = sizeof(lzma->buffer)/sizeof(lzma->buffer[0]);
+ lzma->stream.next_out = lzma->buffer.data();
+ lzma->stream.avail_out = lzma->buffer.size();
lzma->err = lzma_code(&lzma->stream, LZMA_RUN);
if (lzma->err != LZMA_OK)
return -1;
- size_t const n = sizeof(lzma->buffer)/sizeof(lzma->buffer[0]) - lzma->stream.avail_out;
- size_t const m = (n == 0) ? 0 : fwrite(lzma->buffer, 1, n, lzma->file);
+ size_t const n = lzma->buffer.size() - lzma->stream.avail_out;
+ size_t const m = (n == 0) ? 0 : fwrite(lzma->buffer.data(), 1, n, lzma->file);
if (m != n)
{
Res = -1;
diff --git a/apt-pkg/contrib/hashes.cc b/apt-pkg/contrib/hashes.cc
index 7ff5f9e9f..0ad51fff0 100644
--- a/apt-pkg/contrib/hashes.cc
+++ b/apt-pkg/contrib/hashes.cc
@@ -21,6 +21,7 @@
#include <apt-pkg/tagfile.h>
#include <algorithm>
+#include <array>
#include <cassert>
#include <cstddef>
#include <cstdlib>
@@ -372,33 +373,33 @@ bool Hashes::Add(const unsigned char * const Data, unsigned long long const Size
}
bool Hashes::AddFD(int const Fd,unsigned long long Size)
{
- unsigned char Buf[APT_BUFFER_SIZE];
+ std::array<unsigned char, APT_BUFFER_SIZE> Buf;
bool const ToEOF = (Size == UntilEOF);
while (Size != 0 || ToEOF)
{
- decltype(Size) n = sizeof(Buf);
+ decltype(Size) n = Buf.size();
if (!ToEOF) n = std::min(Size, n);
- ssize_t const Res = read(Fd,Buf,n);
+ ssize_t const Res = read(Fd,Buf.data(),n);
if (Res < 0 || (!ToEOF && Res != (ssize_t) n)) // error, or short read
return false;
if (ToEOF && Res == 0) // EOF
break;
Size -= Res;
- if (Add(Buf, Res) == false)
+ if (Add(Buf.data(), Res) == false)
return false;
}
return true;
}
bool Hashes::AddFD(FileFd &Fd,unsigned long long Size)
{
- unsigned char Buf[APT_BUFFER_SIZE];
+ std::array<unsigned char, APT_BUFFER_SIZE> Buf;
bool const ToEOF = (Size == 0);
while (Size != 0 || ToEOF)
{
- decltype(Size) n = sizeof(Buf);
+ decltype(Size) n = Buf.size();
if (!ToEOF) n = std::min(Size, n);
decltype(Size) a = 0;
- if (Fd.Read(Buf, n, &a) == false) // error
+ if (Fd.Read(Buf.data(), n, &a) == false) // error
return false;
if (ToEOF == false)
{
@@ -408,7 +409,7 @@ bool Hashes::AddFD(FileFd &Fd,unsigned long long Size)
else if (a == 0) // EOF
break;
Size -= a;
- if (Add(Buf, a) == false)
+ if (Add(Buf.data(), a) == false)
return false;
}
return true;