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

fileutl: simple_buffer: Add write() and full() methods

These can be used to implement write buffering

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

+ 11 - 0
apt-pkg/contrib/fileutl.cc

@@ -928,6 +928,7 @@ struct APT_HIDDEN simple_buffer {							/*{{{*/
    const char *get() const { return buffer + bufferstart; }
    char *get() { return buffer + bufferstart; }
    bool empty() const { return bufferend <= bufferstart; }
+   bool full() const { return bufferend == buffersize_max; }
    unsigned long long size() const { return bufferend-bufferstart; }
    void reset() { bufferend = bufferstart = 0; }
    ssize_t read(void *to, unsigned long long requested_size) APT_MUSTCHECK
@@ -940,6 +941,16 @@ struct APT_HIDDEN simple_buffer {							/*{{{*/
 	 bufferstart = bufferend = 0;
       return requested_size;
    }
+   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);
+      bufferend += requested_size;
+      if (bufferstart == bufferend)
+	 bufferstart = bufferend = 0;
+      return requested_size;
+   }
 };
 									/*}}}*/