]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/fileutl.cc
simple_buffer::write: Use free() instead of maxsize - size()
[apt.git] / apt-pkg / contrib / fileutl.cc
index de215a50bdd187a39837962fd2e5a7b6d21faa79..004df3fe8d33ffc8e793543570723ba75b3198c0 100644 (file)
@@ -78,6 +78,9 @@
 
 using namespace std;
 
+/* Should be a multiple of the common page size (4096) */
+static constexpr unsigned long long APT_BUFFER_SIZE = 64 * 1024;
+
 // RunScripts - Run a set of scripts from a configuration subtree      /*{{{*/
 // ---------------------------------------------------------------------
 /* */
@@ -163,7 +166,7 @@ bool CopyFile(FileFd &From,FileFd &To)
       return false;
 
    // Buffered copy between fds
-   constexpr size_t BufSize = 64000;
+   constexpr size_t BufSize = APT_BUFFER_SIZE;
    std::unique_ptr<unsigned char[]> Buf(new unsigned char[BufSize]);
    unsigned long long ToRead = 0;
    do {
@@ -932,7 +935,7 @@ struct APT_HIDDEN simple_buffer {                                                   /*{{{*/
       reset(4096);
    }
    ~simple_buffer() {
-      delete buffer;
+      delete[] buffer;
    }
 
    const char *get() const { return buffer + bufferstart; }
@@ -965,9 +968,9 @@ struct APT_HIDDEN simple_buffer {                                                   /*{{{*/
    }
    ssize_t write(const void *from, unsigned long long requested_size) APT_MUSTCHECK
    {
-      if (buffersize_max - size() < requested_size)
-        requested_size = buffersize_max - size();
-      memcpy(buffer + bufferend, from, requested_size);
+      if (free() < requested_size)
+        requested_size = free();
+      memcpy(getend(), from, requested_size);
       bufferend += requested_size;
       if (bufferstart == bufferend)
         bufferstart = bufferend = 0;
@@ -1500,7 +1503,6 @@ public:
 };
                                                                        /*}}}*/
 class APT_HIDDEN Lz4FileFdPrivate: public FileFdPrivate {                              /*{{{*/
-   static constexpr unsigned long long BLK_SIZE = 64 * 1024;
    static constexpr unsigned long long LZ4_HEADER_SIZE = 19;
    static constexpr unsigned long long LZ4_FOOTER_SIZE = 4;
 #ifdef HAVE_LZ4
@@ -1510,7 +1512,7 @@ class APT_HIDDEN Lz4FileFdPrivate: public FileFdPrivate {                         /*{{{*/
    FileFd backend;
    simple_buffer lz4_buffer;
    // Count of bytes that the decompressor expects to read next, or buffer size.
-   size_t next_to_load = BLK_SIZE;
+   size_t next_to_load = APT_BUFFER_SIZE;
 public:
    virtual bool InternalOpen(int const iFd, unsigned int const Mode) override
    {
@@ -1519,11 +1521,11 @@ public:
 
       if ((Mode & FileFd::WriteOnly) == FileFd::WriteOnly) {
         res = LZ4F_createCompressionContext(&cctx, LZ4F_VERSION);
-        lz4_buffer.reset(LZ4F_compressBound(BLK_SIZE, nullptr)
+        lz4_buffer.reset(LZ4F_compressBound(APT_BUFFER_SIZE, nullptr)
                          + LZ4_HEADER_SIZE + LZ4_FOOTER_SIZE);
       } else {
         res = LZ4F_createDecompressionContext(&dctx, LZ4F_VERSION);
-        lz4_buffer.reset(64 * 1024);
+        lz4_buffer.reset(APT_BUFFER_SIZE);
       }
 
       filefd->Flags |= FileFd::Compressed;
@@ -1591,7 +1593,7 @@ public:
    }
    virtual ssize_t InternalWrite(void const * const From, unsigned long long const Size) override
    {
-      unsigned long long const towrite = std::min(BLK_SIZE, Size);
+      unsigned long long const towrite = std::min(APT_BUFFER_SIZE, Size);
 
       res = LZ4F_compressUpdate(cctx,
                                lz4_buffer.buffer, lz4_buffer.buffersize_max,
@@ -1619,7 +1621,7 @@ public:
    {
       /* Reset variables */
       res = 0;
-      next_to_load = BLK_SIZE;
+      next_to_load = APT_BUFFER_SIZE;
 
       if (cctx != nullptr)
       {