summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/contrib/fileutl.cc16
1 files changed, 8 insertions, 8 deletions
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
index 0c5d76290..7f3ed673a 100644
--- a/apt-pkg/contrib/fileutl.cc
+++ b/apt-pkg/contrib/fileutl.cc
@@ -1218,16 +1218,16 @@ public:
}
virtual bool InternalFlush() override
{
- size_t written = 0;
- char *data = writebuffer.get();
- auto size = writebuffer.size();
-
- while (written < size) {
- auto written_this_time = wrapped->InternalWrite(data + written, size - written);
- if (written_this_time < 0)
+ while (writebuffer.empty() == false) {
+ auto written = wrapped->InternalWrite(writebuffer.get(),
+ writebuffer.size());
+ // Ignore interrupted syscalls
+ if (written < 0 && errno == EINTR)
+ continue;
+ if (written < 0)
return false;
- written += written_this_time;
+ writebuffer.bufferstart += written;
}
writebuffer.reset();