From 6d1e3092b4f527690c739a113caa7a123959c807 Mon Sep 17 00:00:00 2001 From: Chris Demetriou Date: Fri, 24 Apr 2009 19:48:21 +0000 Subject: [PATCH] 2008-04-23 Elliott Hughes * output.cc (Output_file::close): After short writes, continue writing from the correct offset in the buffer being written. --- gold/ChangeLog | 5 +++++ gold/output.cc | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index bec3a75bef..c9a42a854f 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,8 @@ +2008-04-23 Elliott Hughes + + * output.cc (Output_file::close): After short writes, continue + writing from the correct offset in the buffer being written. + 2009-04-23 Chris Demetriou * configure.ac (HAVE_TR1_UNORDERED_MAP_REHASH): New define. diff --git a/gold/output.cc b/gold/output.cc index d70c37a830..b5321369a3 100644 --- a/gold/output.cc +++ b/gold/output.cc @@ -3460,15 +3460,20 @@ Output_file::close() if (this->map_is_anonymous_ && !this->is_temporary_) { size_t bytes_to_write = this->file_size_; + size_t offset = 0; while (bytes_to_write > 0) { - ssize_t bytes_written = ::write(this->o_, this->base_, bytes_to_write); + ssize_t bytes_written = ::write(this->o_, this->base_ + offset, + bytes_to_write); if (bytes_written == 0) gold_error(_("%s: write: unexpected 0 return-value"), this->name_); else if (bytes_written < 0) gold_error(_("%s: write: %s"), this->name_, strerror(errno)); else - bytes_to_write -= bytes_written; + { + bytes_to_write -= bytes_written; + offset += bytes_written; + } } } this->unmap();