X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/80f06991967d4daccb1c0c1147a6e16291ebb027..1f5062f656b4919ff1d3126c413c40e53fdd1ab2:/apt-pkg/contrib/fileutl.cc 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();