diff options
author | Max Kellermann <max@duempel.org> | 2015-03-24 21:51:34 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2015-03-24 21:59:34 +0100 |
commit | 6387b528961010b09e20fe807b5207ca7bf821f9 (patch) | |
tree | 4164551a066a671e1db63914aa330928a51c8a07 /src/fs | |
parent | 077e95da852189601fcc156fda9ec8f4a64887cb (diff) | |
download | mpd-6387b528961010b09e20fe807b5207ca7bf821f9.tar.gz mpd-6387b528961010b09e20fe807b5207ca7bf821f9.tar.xz mpd-6387b528961010b09e20fe807b5207ca7bf821f9.zip |
fs/io/FileOutputStream: seek end-of-file in AppendFileOutputStream ctor
Diffstat (limited to 'src/fs')
-rw-r--r-- | src/fs/io/FileOutputStream.cxx | 6 | ||||
-rw-r--r-- | src/fs/io/FileOutputStream.hxx | 6 |
2 files changed, 12 insertions, 0 deletions
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 |