diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Main.cxx | 4 | ||||
-rw-r--r-- | src/storage/plugins/LocalStorage.cxx | 55 | ||||
-rw-r--r-- | src/storage/plugins/LocalStorage.hxx | 53 |
3 files changed, 63 insertions, 49 deletions
diff --git a/src/Main.cxx b/src/Main.cxx index 65993ea8e..8e0b92d9c 100644 --- a/src/Main.cxx +++ b/src/Main.cxx @@ -210,8 +210,8 @@ glue_db_init_and_load(void) return true; SimpleDatabase &db = *(SimpleDatabase *)instance->database; - instance->storage = new LocalStorage(mapper_get_music_directory_utf8(), - mapper_get_music_directory_fs()); + instance->storage = CreateLocalStorage(mapper_get_music_directory_utf8(), + mapper_get_music_directory_fs()); instance->update = new UpdateService(*instance->event_loop, db, *instance->storage, *instance); diff --git a/src/storage/plugins/LocalStorage.cxx b/src/storage/plugins/LocalStorage.cxx index 0d45c9dcc..23e87c1b5 100644 --- a/src/storage/plugins/LocalStorage.cxx +++ b/src/storage/plugins/LocalStorage.cxx @@ -19,9 +19,58 @@ #include "config.h" #include "LocalStorage.hxx" +#include "storage/StorageInterface.hxx" #include "storage/FileInfo.hxx" #include "util/Error.hxx" #include "fs/FileSystem.hxx" +#include "fs/AllocatedPath.hxx" +#include "fs/DirectoryReader.hxx" + +#include <string> + +class LocalDirectoryReader final : public StorageDirectoryReader { + AllocatedPath base_fs; + + DirectoryReader reader; + + std::string name_utf8; + +public: + LocalDirectoryReader(AllocatedPath &&_base_fs) + :base_fs(std::move(_base_fs)), reader(base_fs) {} + + bool HasFailed() { + return reader.HasFailed(); + } + + /* virtual methods from class StorageDirectoryReader */ + virtual const char *Read() override; + virtual bool GetInfo(bool follow, FileInfo &info, + Error &error) override; +}; + +class LocalStorage final : public Storage { + const std::string base_utf8; + const AllocatedPath base_fs; + +public: + LocalStorage(const char *_base_utf8, Path _base_fs) + :base_utf8(_base_utf8), base_fs(_base_fs) {} + + /* virtual methods from class Storage */ + virtual bool GetInfo(const char *uri_utf8, bool follow, FileInfo &info, + Error &error) override; + + virtual StorageDirectoryReader *OpenDirectory(const char *uri_utf8, + Error &error) override; + + virtual std::string MapUTF8(const char *uri_utf8) const override; + + virtual AllocatedPath MapFS(const char *uri_utf8) const override; + +private: + AllocatedPath MapFS(const char *uri_utf8, Error &error) const; +}; static bool Stat(Path path, bool follow, FileInfo &info, Error &error) @@ -144,3 +193,9 @@ LocalDirectoryReader::GetInfo(bool follow, FileInfo &info, Error &error) AllocatedPath::Build(base_fs, reader.GetEntry()); return Stat(path_fs, follow, info, error); } + +Storage * +CreateLocalStorage(const char *base_utf8, Path base_fs) +{ + return new LocalStorage(base_utf8, base_fs); +} diff --git a/src/storage/plugins/LocalStorage.hxx b/src/storage/plugins/LocalStorage.hxx index bcbced3eb..cad2d1e58 100644 --- a/src/storage/plugins/LocalStorage.hxx +++ b/src/storage/plugins/LocalStorage.hxx @@ -21,54 +21,13 @@ #define MPD_STORAGE_LOCAL_HXX #include "check.h" -#include "storage/StorageInterface.hxx" -#include "fs/AllocatedPath.hxx" -#include "fs/DirectoryReader.hxx" +#include "Compiler.h" -#include <string> +class Storage; +class Path; -class LocalDirectoryReader final : public StorageDirectoryReader { - AllocatedPath base_fs; - - DirectoryReader reader; - - std::string name_utf8; - -public: - LocalDirectoryReader(AllocatedPath &&_base_fs) - :base_fs(std::move(_base_fs)), reader(base_fs) {} - - bool HasFailed() { - return reader.HasFailed(); - } - - /* virtual methods from class StorageDirectoryReader */ - virtual const char *Read() override; - virtual bool GetInfo(bool follow, FileInfo &info, - Error &error) override; -}; - -class LocalStorage final : public Storage { - const std::string base_utf8; - const AllocatedPath base_fs; - -public: - LocalStorage(const char *_base_utf8, Path _base_fs) - :base_utf8(_base_utf8), base_fs(_base_fs) {} - - /* virtual methods from class Storage */ - virtual bool GetInfo(const char *uri_utf8, bool follow, FileInfo &info, - Error &error) override; - - virtual StorageDirectoryReader *OpenDirectory(const char *uri_utf8, - Error &error) override; - - virtual std::string MapUTF8(const char *uri_utf8) const override; - - virtual AllocatedPath MapFS(const char *uri_utf8) const override; - -private: - AllocatedPath MapFS(const char *uri_utf8, Error &error) const; -}; +gcc_malloc gcc_nonnull_all +Storage * +CreateLocalStorage(const char *base_utf8, Path base_fs); #endif |