From c368b3abe198f59d5bd4d715a801e1b187b698a7 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Sun, 27 Dec 2015 15:35:51 +0100 Subject: fileutl: simple_buffer: Add write() and full() methods These can be used to implement write buffering Gbp-Dch: ignore --- apt-pkg/contrib/fileutl.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'apt-pkg/contrib/fileutl.cc') 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; + } }; /*}}}*/ -- cgit v1.2.3