aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2015-03-24 21:46:01 +0100
committerMax Kellermann <max@duempel.org>2015-03-24 22:00:10 +0100
commitf1f871f103c4ece84ff8d7de3d6d4f4b32bd5177 (patch)
treec7b61ac06cb32e1e23e192149079387d4336550f
parent6387b528961010b09e20fe807b5207ca7bf821f9 (diff)
downloadmpd-f1f871f103c4ece84ff8d7de3d6d4f4b32bd5177.tar.gz
mpd-f1f871f103c4ece84ff8d7de3d6d4f4b32bd5177.tar.xz
mpd-f1f871f103c4ece84ff8d7de3d6d4f4b32bd5177.zip
fs/io/FileOutputStream: add method Tell()
-rw-r--r--src/fs/io/FileOutputStream.cxx17
-rw-r--r--src/fs/io/FileOutputStream.hxx3
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;
};