diff options
author | Max Kellermann <max@duempel.org> | 2015-03-24 21:46:01 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2015-03-24 22:00:10 +0100 |
commit | f1f871f103c4ece84ff8d7de3d6d4f4b32bd5177 (patch) | |
tree | c7b61ac06cb32e1e23e192149079387d4336550f | |
parent | 6387b528961010b09e20fe807b5207ca7bf821f9 (diff) | |
download | mpd-f1f871f103c4ece84ff8d7de3d6d4f4b32bd5177.tar.gz mpd-f1f871f103c4ece84ff8d7de3d6d4f4b32bd5177.tar.xz mpd-f1f871f103c4ece84ff8d7de3d6d4f4b32bd5177.zip |
fs/io/FileOutputStream: add method Tell()
-rw-r--r-- | src/fs/io/FileOutputStream.cxx | 17 | ||||
-rw-r--r-- | src/fs/io/FileOutputStream.hxx | 3 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/fs/io/FileOutputStream.cxx b/src/fs/io/FileOutputStream.cxx index c7410f180..265594c26 100644 --- a/src/fs/io/FileOutputStream.cxx +++ b/src/fs/io/FileOutputStream.cxx @@ -48,6 +48,17 @@ FileOutputStream::FileOutputStream(Path _path, Error &error) GetPath().ToUTF8().c_str()); } +uint64_t +BaseFileOutputStream::Tell() const +{ + LONG high = 0; + DWORD low = SetFilePointer(handle, 0, &high, FILE_CURRENT); + if (low == 0xffffffff) + return 0; + + return uint64_t(high) << 32 | uint64_t(low); +} + bool BaseFileOutputStream::Write(const void *data, size_t size, Error &error) { @@ -136,6 +147,12 @@ FileOutputStream::FileOutputStream(Path _path, Error &error) #endif } +uint64_t +BaseFileOutputStream::Tell() const +{ + return fd.Tell(); +} + bool BaseFileOutputStream::Write(const void *data, size_t size, Error &error) { diff --git a/src/fs/io/FileOutputStream.hxx b/src/fs/io/FileOutputStream.hxx index 6756de99e..851d67a6d 100644 --- a/src/fs/io/FileOutputStream.hxx +++ b/src/fs/io/FileOutputStream.hxx @@ -114,6 +114,9 @@ public: return path; } + gcc_pure + uint64_t Tell() const; + /* virtual methods from class OutputStream */ bool Write(const void *data, size_t size, Error &error) override; }; |