From bab9090fa32be3fd43bef52ff7a17531964f10fb Mon Sep 17 00:00:00 2001 From: Cary Coutant Date: Tue, 18 Oct 2011 21:36:29 +0000 Subject: [PATCH] * output.cc (posix_fallocate): Return 0 on success, errno on failure. (Output_file::map_no_anonymous): Check for non-zero return code from posix_fallocate. --- gold/ChangeLog | 6 ++++++ gold/output.cc | 12 +++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/gold/ChangeLog b/gold/ChangeLog index 18339967649..61ad6cdd33f 100644 --- a/gold/ChangeLog +++ b/gold/ChangeLog @@ -1,3 +1,9 @@ +2011-10-18 Cary Coutant + + * output.cc (posix_fallocate): Return 0 on success, errno on failure. + (Output_file::map_no_anonymous): Check for non-zero + return code from posix_fallocate. + 2011-10-17 Cary Coutant PR gold/13245 diff --git a/gold/output.cc b/gold/output.cc index 7b272e85472..7633c730807 100644 --- a/gold/output.cc +++ b/gold/output.cc @@ -119,7 +119,9 @@ extern "C" void *gold_mremap(void *, size_t, size_t, int); static int posix_fallocate(int o, off_t offset, off_t len) { - return ftruncate(o, offset + len); + if (ftruncate(o, offset + len) < 0) + return errno; + return 0; } #endif // !defined(HAVE_POSIX_FALLOCATE) @@ -5075,8 +5077,12 @@ Output_file::map_no_anonymous(bool writable) // output file will wind up incomplete, but we will have already // exited. The alternative to fallocate would be to use fdatasync, // but that would be a more significant performance hit. - if (writable && ::posix_fallocate(o, 0, this->file_size_) < 0) - gold_fatal(_("%s: %s"), this->name_, strerror(errno)); + if (writable) + { + int err = ::posix_fallocate(o, 0, this->file_size_); + if (err != 0) + gold_fatal(_("%s: %s"), this->name_, strerror(err)); + } // Map the file into memory. int prot = PROT_READ; -- 2.30.2