Просмотр исходного кода

simple_buffer: Allow buffer size to change

Gbp-Dch: ignore
Julian Andres Klode лет назад: 10
Родитель
Сommit
5bdba2ca23
1 измененных файлов с 18 добавлено и 2 удалено
  1. 18 2
      apt-pkg/contrib/fileutl.cc

+ 18 - 2
apt-pkg/contrib/fileutl.cc

@@ -920,16 +920,32 @@ bool ChangeOwnerAndPermissionOfFile(char const * const requester, char const * c
 									/*}}}*/
 									/*}}}*/
 
 
 struct APT_HIDDEN simple_buffer {							/*{{{*/
 struct APT_HIDDEN simple_buffer {							/*{{{*/
-   static constexpr size_t buffersize_max = 4096;
+   size_t buffersize_max = 0;
    unsigned long long bufferstart = 0;
    unsigned long long bufferstart = 0;
    unsigned long long bufferend = 0;
    unsigned long long bufferend = 0;
-   char buffer[buffersize_max];
+   char *buffer = nullptr;
+
+   simple_buffer() {
+      reset(4096);
+   }
+   ~simple_buffer() {
+      delete buffer;
+   }
 
 
    const char *get() const { return buffer + bufferstart; }
    const char *get() const { return buffer + bufferstart; }
    char *get() { return buffer + bufferstart; }
    char *get() { return buffer + bufferstart; }
    bool empty() const { return bufferend <= bufferstart; }
    bool empty() const { return bufferend <= bufferstart; }
    bool full() const { return bufferend == buffersize_max; }
    bool full() const { return bufferend == buffersize_max; }
    unsigned long long size() const { return bufferend-bufferstart; }
    unsigned long long size() const { return bufferend-bufferstart; }
+   void reset(size_t size)
+   {
+      if (size > buffersize_max) {
+	 delete[] buffer;
+	 buffersize_max = size;
+	 buffer = new char[size];
+      }
+      reset();
+   }
    void reset() { bufferend = bufferstart = 0; }
    void reset() { bufferend = bufferstart = 0; }
    ssize_t read(void *to, unsigned long long requested_size) APT_MUSTCHECK
    ssize_t read(void *to, unsigned long long requested_size) APT_MUSTCHECK
    {
    {