aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2015-03-03 20:34:02 +0100
committerMax Kellermann <max@duempel.org>2015-03-03 21:41:11 +0100
commita5760670efca8ea6c4b4d425ea5e0479c760b48e (patch)
treefb427ca3919fbdd5dd59222ac1b2ab548dc8d9cd
parentf04a3ec2017d63b8bb48e3d71c6502779a05321a (diff)
downloadmpd-a5760670efca8ea6c4b4d425ea5e0479c760b48e.tar.gz
mpd-a5760670efca8ea6c4b4d425ea5e0479c760b48e.tar.xz
mpd-a5760670efca8ea6c4b4d425ea5e0479c760b48e.zip
fs/io/FileReader: add method GetFileInfo()
-rw-r--r--src/fs/FileInfo.hxx1
-rw-r--r--src/fs/io/FileReader.cxx23
-rw-r--r--src/fs/io/FileReader.hxx3
3 files changed, 26 insertions, 1 deletions
diff --git a/src/fs/FileInfo.hxx b/src/fs/FileInfo.hxx
index 3805d3ef0..ad0fb4064 100644
--- a/src/fs/FileInfo.hxx
+++ b/src/fs/FileInfo.hxx
@@ -54,6 +54,7 @@ class FileInfo {
bool follow_symlinks);
friend bool GetFileInfo(Path path, FileInfo &info,
Error &error);
+ friend class FileReader;
#ifdef WIN32
WIN32_FILE_ATTRIBUTE_DATA data;
diff --git a/src/fs/io/FileReader.cxx b/src/fs/io/FileReader.cxx
index 474431ef8..e54f6f3a8 100644
--- a/src/fs/io/FileReader.cxx
+++ b/src/fs/io/FileReader.cxx
@@ -19,7 +19,7 @@
#include "config.h"
#include "FileReader.hxx"
-#include "fs/FileSystem.hxx"
+#include "fs/FileInfo.hxx"
#include "util/Error.hxx"
#ifdef WIN32
@@ -36,6 +36,14 @@ FileReader::FileReader(Path _path, Error &error)
}
}
+bool
+FileReader::GetFileInfo(FileInfo &info, Error &error) const
+{
+ assert(IsDefined());
+
+ return ::GetFileInfo(path, info, error);
+}
+
size_t
FileReader::Read(void *data, size_t size, Error &error)
{
@@ -83,6 +91,19 @@ FileReader::FileReader(Path _path, Error &error)
error.FormatErrno("Failed to open %s", path.c_str());
}
+bool
+FileReader::GetFileInfo(FileInfo &info, Error &error) const
+{
+ assert(IsDefined());
+
+ const bool success = fstat(fd.Get(), &info.st) == 0;
+ if (!success)
+ error.FormatErrno("Failed to access %s",
+ path.ToUTF8().c_str());
+
+ return success;
+}
+
size_t
FileReader::Read(void *data, size_t size, Error &error)
{
diff --git a/src/fs/io/FileReader.hxx b/src/fs/io/FileReader.hxx
index 53651380f..c67bd6d77 100644
--- a/src/fs/io/FileReader.hxx
+++ b/src/fs/io/FileReader.hxx
@@ -36,6 +36,7 @@
#endif
class Path;
+class FileInfo;
class FileReader final : public Reader {
AllocatedPath path;
@@ -79,6 +80,8 @@ public:
void Close();
+ bool GetFileInfo(FileInfo &info, Error &error) const;
+
bool Seek(off_t offset, Error &error);
/* virtual methods from class Reader */