From 6387b528961010b09e20fe807b5207ca7bf821f9 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 24 Mar 2015 21:51:34 +0100 Subject: fs/io/FileOutputStream: seek end-of-file in AppendFileOutputStream ctor --- src/fs/io/FileOutputStream.cxx | 6 ++++++ src/fs/io/FileOutputStream.hxx | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/fs/io/FileOutputStream.cxx b/src/fs/io/FileOutputStream.cxx index 82d9c3dc1..c7410f180 100644 --- a/src/fs/io/FileOutputStream.cxx +++ b/src/fs/io/FileOutputStream.cxx @@ -226,6 +226,12 @@ AppendFileOutputStream::AppendFileOutputStream(Path _path, Error &error) if (!IsDefined()) error.FormatLastError("Failed to append to %s", GetPath().ToUTF8().c_str()); + + if (!SeekEOF()) { + error.FormatLastError("Failed seek end-of-file of %s", + GetPath().ToUTF8().c_str()); + Close(); + } #else if (!SetFD().Open(GetPath().c_str(), O_WRONLY|O_APPEND)) diff --git a/src/fs/io/FileOutputStream.hxx b/src/fs/io/FileOutputStream.hxx index 9decb6f00..6756de99e 100644 --- a/src/fs/io/FileOutputStream.hxx +++ b/src/fs/io/FileOutputStream.hxx @@ -95,6 +95,12 @@ protected: #endif } +#ifdef WIN32 + bool SeekEOF() { + return SetFilePointer(handle, 0, nullptr, FILE_END); + } +#endif + public: bool IsDefined() const { #ifdef WIN32 -- cgit v1.2.3