aboutsummaryrefslogtreecommitdiffstats
path: root/src/db
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2015-02-28 20:42:50 +0100
committerMax Kellermann <max@duempel.org>2015-02-28 23:00:26 +0100
commit90a61b6babe3528efd982511790057e1e1e39b81 (patch)
treecae3a8072a056118865a988042e1f1269d11e277 /src/db
parent00583bc4a8357cf43930151650dc058225675403 (diff)
downloadmpd-90a61b6babe3528efd982511790057e1e1e39b81.tar.gz
mpd-90a61b6babe3528efd982511790057e1e1e39b81.tar.xz
mpd-90a61b6babe3528efd982511790057e1e1e39b81.zip
fs/FileInfo: new library providing GetFileInfo()
Replaces StatFile(), with a portable data object.
Diffstat (limited to 'src/db')
-rw-r--r--src/db/plugins/simple/SimpleDatabasePlugin.cxx32
-rw-r--r--src/db/update/InotifyUpdate.cxx15
2 files changed, 21 insertions, 26 deletions
diff --git a/src/db/plugins/simple/SimpleDatabasePlugin.cxx b/src/db/plugins/simple/SimpleDatabasePlugin.cxx
index 913141d22..39dbcf8b7 100644
--- a/src/db/plugins/simple/SimpleDatabasePlugin.cxx
+++ b/src/db/plugins/simple/SimpleDatabasePlugin.cxx
@@ -34,6 +34,7 @@
#include "fs/io/TextFile.hxx"
#include "fs/io/BufferedOutputStream.hxx"
#include "fs/io/FileOutputStream.hxx"
+#include "fs/FileInfo.hxx"
#include "config/Block.hxx"
#include "fs/FileSystem.hxx"
#include "util/CharUtil.hxx"
@@ -124,15 +125,13 @@ SimpleDatabase::Check(Error &error) const
const auto dirPath = path.GetDirectoryName();
/* Check that the parent part of the path is a directory */
- struct stat st;
- if (!StatFile(dirPath, st)) {
- error.FormatErrno("Couldn't stat parent directory of db file "
- "\"%s\"",
- path_utf8.c_str());
+ FileInfo fi;
+ if (!GetFileInfo(dirPath, fi, error)) {
+ error.AddPrefix("On parent directory of db file: ");
return false;
}
- if (!S_ISDIR(st.st_mode)) {
+ if (!fi.IsDirectory()) {
error.Format(simple_db_domain,
"Couldn't create db file \"%s\" because the "
"parent path is not a directory",
@@ -154,14 +153,11 @@ SimpleDatabase::Check(Error &error) const
}
/* Path exists, now check if it's a regular file */
- struct stat st;
- if (!StatFile(path, st)) {
- error.FormatErrno("Couldn't stat db file \"%s\"",
- path_utf8.c_str());
+ FileInfo fi;
+ if (!GetFileInfo(path, fi, error))
return false;
- }
- if (!S_ISREG(st.st_mode)) {
+ if (!fi.IsRegular()) {
error.Format(simple_db_domain,
"db file \"%s\" is not a regular file",
path_utf8.c_str());
@@ -193,9 +189,9 @@ SimpleDatabase::Load(Error &error)
if (!db_load_internal(file, *root, error) || !file.Check(error))
return false;
- struct stat st;
- if (StatFile(path, st))
- mtime = st.st_mtime;
+ FileInfo fi;
+ if (GetFileInfo(path, fi))
+ mtime = fi.GetModificationTime();
return true;
}
@@ -425,9 +421,9 @@ SimpleDatabase::Save(Error &error)
if (!fos.Commit(error))
return false;
- struct stat st;
- if (StatFile(path, st))
- mtime = st.st_mtime;
+ FileInfo fi;
+ if (GetFileInfo(path, fi))
+ mtime = fi.GetModificationTime();
return true;
}
diff --git a/src/db/update/InotifyUpdate.cxx b/src/db/update/InotifyUpdate.cxx
index 42423e07e..f699b7f78 100644
--- a/src/db/update/InotifyUpdate.cxx
+++ b/src/db/update/InotifyUpdate.cxx
@@ -24,7 +24,7 @@
#include "InotifyDomain.hxx"
#include "storage/StorageInterface.hxx"
#include "fs/AllocatedPath.hxx"
-#include "fs/FileSystem.hxx"
+#include "fs/FileInfo.hxx"
#include "util/Error.hxx"
#include "Log.hxx"
@@ -179,7 +179,6 @@ recursive_watch_subdirectories(WatchDirectory *directory,
}
while ((ent = readdir(dir))) {
- struct stat st;
int ret;
if (skip_path(ent->d_name))
@@ -187,15 +186,15 @@ recursive_watch_subdirectories(WatchDirectory *directory,
const auto child_path_fs =
AllocatedPath::Build(path_fs, ent->d_name);
- ret = StatFile(child_path_fs, st);
- if (ret < 0) {
- FormatErrno(inotify_domain,
- "Failed to stat %s",
- child_path_fs.c_str());
+
+ FileInfo fi;
+ if (!GetFileInfo(child_path_fs, fi, error)) {
+ LogError(error);
+ error.Clear();
continue;
}
- if (!S_ISDIR(st.st_mode))
+ if (!fi.IsDirectory())
continue;
ret = inotify_source->Add(child_path_fs.c_str(), IN_MASK,