diff options
-rw-r--r-- | apt-pkg/contrib/fileutl.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index 38ae0246e..99c0a3417 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/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; + } }; /*}}}*/ |