diff options
author | wwylele <wwylele@gmail.com> | 2016-10-16 16:19:13 +0200 |
---|---|---|
committer | wwylele <wwylele@gmail.com> | 2016-11-19 16:17:19 +0100 |
commit | 75ee2f8c67022b0731e438b34fa65216531eccd1 (patch) | |
tree | df4293ddc6a1712e102a7f2d8d71205364b02d6b /src/core/file_sys/path_parser.h | |
parent | FileSys: make Archive interfaces return error code (diff) | |
download | yuzu-75ee2f8c67022b0731e438b34fa65216531eccd1.tar yuzu-75ee2f8c67022b0731e438b34fa65216531eccd1.tar.gz yuzu-75ee2f8c67022b0731e438b34fa65216531eccd1.tar.bz2 yuzu-75ee2f8c67022b0731e438b34fa65216531eccd1.tar.lz yuzu-75ee2f8c67022b0731e438b34fa65216531eccd1.tar.xz yuzu-75ee2f8c67022b0731e438b34fa65216531eccd1.tar.zst yuzu-75ee2f8c67022b0731e438b34fa65216531eccd1.zip |
Diffstat (limited to 'src/core/file_sys/path_parser.h')
-rw-r--r-- | src/core/file_sys/path_parser.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/core/file_sys/path_parser.h b/src/core/file_sys/path_parser.h new file mode 100644 index 000000000..990802579 --- /dev/null +++ b/src/core/file_sys/path_parser.h @@ -0,0 +1,61 @@ +// Copyright 2016 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <string> +#include <vector> +#include "core/file_sys/archive_backend.h" + +namespace FileSys { + +/** + * A helper class parsing and verifying a string-type Path. + * Every archives with a sub file system should use this class to parse the path argument and check + * the status of the file / directory in question on the host file system. + */ +class PathParser { +public: + PathParser(const Path& path); + + /** + * Checks if the Path is valid. + * This function should be called once a PathParser is constructed. + * A Path is valid if: + * - it is a string path (with type LowPathType::Char or LowPathType::Wchar), + * - it starts with "/" (this seems a hard requirement in real 3DS), + * - it doesn't contain invalid characters, and + * - it doesn't go out of the root directory using "..". + */ + bool IsValid() const { + return is_valid; + } + + /// Checks if the Path represents the root directory. + bool IsRootDirectory() const { + return is_root; + } + + enum HostStatus { + InvalidMountPoint, + PathNotFound, // "/a/b/c" when "a" doesn't exist + FileInPath, // "/a/b/c" when "a" is a file + FileFound, // "/a/b/c" when "c" is a file + DirectoryFound, // "/a/b/c" when "c" is a directory + NotFound // "/a/b/c" when "a/b/" exists but "c" doesn't exist + }; + + /// Checks the status of the specified file / directory by the Path on the host file system. + HostStatus GetHostStatus(const std::string& mount_point) const; + + /// Builds a full path on the host file system. + std::string BuildHostPath(const std::string& mount_point) const; + +private: + std::vector<std::string> path_sequence; + bool is_valid{}; + bool is_root{}; +}; + +} // namespace FileSys |