diff options
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> | 2016-09-18 02:38:01 +0200 |
---|---|---|
committer | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> | 2016-09-18 02:38:01 +0200 |
commit | dc8479928c5aee4c6ad6fe4f59006fb604cee701 (patch) | |
tree | 569a7f13128450bbab973236615587ff00bced5f /src/common/file_util.h | |
parent | Travis: Import Dolphin’s clang-format hook. (diff) | |
download | yuzu-dc8479928c5aee4c6ad6fe4f59006fb604cee701.tar yuzu-dc8479928c5aee4c6ad6fe4f59006fb604cee701.tar.gz yuzu-dc8479928c5aee4c6ad6fe4f59006fb604cee701.tar.bz2 yuzu-dc8479928c5aee4c6ad6fe4f59006fb604cee701.tar.lz yuzu-dc8479928c5aee4c6ad6fe4f59006fb604cee701.tar.xz yuzu-dc8479928c5aee4c6ad6fe4f59006fb604cee701.tar.zst yuzu-dc8479928c5aee4c6ad6fe4f59006fb604cee701.zip |
Diffstat (limited to 'src/common/file_util.h')
-rw-r--r-- | src/common/file_util.h | 118 |
1 files changed, 63 insertions, 55 deletions
diff --git a/src/common/file_util.h b/src/common/file_util.h index 7ad7ee829..b15021a63 100644 --- a/src/common/file_util.h +++ b/src/common/file_util.h @@ -5,9 +5,9 @@ #pragma once #include <array> +#include <cstdio> #include <fstream> #include <functional> -#include <cstdio> #include <string> #include <type_traits> #include <vector> @@ -51,75 +51,75 @@ enum { NUM_PATH_INDICES }; -namespace FileUtil -{ +namespace FileUtil { // FileSystem tree node/ -struct FSTEntry -{ +struct FSTEntry { bool isDirectory; - u64 size; // file length or number of entries from children - std::string physicalName; // name on disk - std::string virtualName; // name in FST names table + u64 size; // file length or number of entries from children + std::string physicalName; // name on disk + std::string virtualName; // name in FST names table std::vector<FSTEntry> children; }; // Returns true if file filename exists -bool Exists(const std::string &filename); +bool Exists(const std::string& filename); // Returns true if filename is a directory -bool IsDirectory(const std::string &filename); +bool IsDirectory(const std::string& filename); // Returns the size of filename (64bit) -u64 GetSize(const std::string &filename); +u64 GetSize(const std::string& filename); // Overloaded GetSize, accepts file descriptor u64 GetSize(const int fd); // Overloaded GetSize, accepts FILE* -u64 GetSize(FILE *f); +u64 GetSize(FILE* f); // Returns true if successful, or path already exists. -bool CreateDir(const std::string &filename); +bool CreateDir(const std::string& filename); // Creates the full path of fullPath returns true on success -bool CreateFullPath(const std::string &fullPath); +bool CreateFullPath(const std::string& fullPath); // Deletes a given filename, return true on success // Doesn't supports deleting a directory -bool Delete(const std::string &filename); +bool Delete(const std::string& filename); // Deletes a directory filename, returns true on success -bool DeleteDir(const std::string &filename); +bool DeleteDir(const std::string& filename); // renames file srcFilename to destFilename, returns true on success -bool Rename(const std::string &srcFilename, const std::string &destFilename); +bool Rename(const std::string& srcFilename, const std::string& destFilename); // copies file srcFilename to destFilename, returns true on success -bool Copy(const std::string &srcFilename, const std::string &destFilename); +bool Copy(const std::string& srcFilename, const std::string& destFilename); // creates an empty file filename, returns true on success -bool CreateEmptyFile(const std::string &filename); +bool CreateEmptyFile(const std::string& filename); /** - * @param num_entries_out to be assigned by the callable with the number of iterated directory entries, never null + * @param num_entries_out to be assigned by the callable with the number of iterated directory + * entries, never null * @param directory the path to the enclosing directory * @param virtual_name the entry name, without any preceding directory info * @return whether handling the entry succeeded */ -using DirectoryEntryCallable = std::function<bool(unsigned* num_entries_out, - const std::string& directory, - const std::string& virtual_name)>; +using DirectoryEntryCallable = std::function<bool( + unsigned* num_entries_out, const std::string& directory, const std::string& virtual_name)>; /** * Scans a directory, calling the callback for each file/directory contained within. * If the callback returns failure, scanning halts and this function returns failure as well - * @param num_entries_out assigned by the function with the number of iterated directory entries, can be null + * @param num_entries_out assigned by the function with the number of iterated directory entries, + * can be null * @param directory the directory to scan * @param callback The callback which will be called for each entry * @return whether scanning the directory succeeded */ -bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string &directory, DirectoryEntryCallable callback); +bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string& directory, + DirectoryEntryCallable callback); /** * Scans the directory tree, storing the results. @@ -128,23 +128,24 @@ bool ForeachDirectoryEntry(unsigned* num_entries_out, const std::string &directo * @param recursion Number of children directories to read before giving up. * @return the total number of files/directories found */ -unsigned ScanDirectoryTree(const std::string &directory, FSTEntry& parent_entry, unsigned int recursion = 0); +unsigned ScanDirectoryTree(const std::string& directory, FSTEntry& parent_entry, + unsigned int recursion = 0); // deletes the given directory and anything under it. Returns true on success. -bool DeleteDirRecursively(const std::string &directory, unsigned int recursion = 256); +bool DeleteDirRecursively(const std::string& directory, unsigned int recursion = 256); // Returns the current directory std::string GetCurrentDir(); // Create directory and copy contents (does not overwrite existing files) -void CopyDir(const std::string &source_path, const std::string &dest_path); +void CopyDir(const std::string& source_path, const std::string& dest_path); // Set the current directory to given directory -bool SetCurrentDir(const std::string &directory); +bool SetCurrentDir(const std::string& directory); // Returns a pointer to a string with a Citra data dir in the user's home // directory. To be used in "multi-user" mode (that is, installed). -const std::string& GetUserPath(const unsigned int DirIDX, const std::string &newPath=""); +const std::string& GetUserPath(const unsigned int DirIDX, const std::string& newPath = ""); // Returns the path to where the sys file are std::string GetSysDirectory(); @@ -154,11 +155,11 @@ std::string GetBundleDirectory(); #endif #ifdef _WIN32 -std::string &GetExeDirectory(); +std::string& GetExeDirectory(); #endif -size_t WriteStringToFile(bool text_file, const std::string &str, const char *filename); -size_t ReadFileToString(bool text_file, const char *filename, std::string &str); +size_t WriteStringToFile(bool text_file, const std::string& str, const char* filename); +size_t ReadFileToString(bool text_file, const char* filename, std::string& str); /** * Splits the filename into 8.3 format @@ -173,8 +174,7 @@ void SplitFilename83(const std::string& filename, std::array<char, 9>& short_nam // simple wrapper for cstdlib file functions to // hopefully will make error checking easier // and make forgetting an fclose() harder -class IOFile : public NonCopyable -{ +class IOFile : public NonCopyable { public: IOFile(); IOFile(const std::string& filename, const char openmode[]); @@ -190,11 +190,12 @@ public: bool Close(); template <typename T> - size_t ReadArray(T* data, size_t length) - { - static_assert(std::is_standard_layout<T>(), "Given array does not consist of standard layout objects"); + size_t ReadArray(T* data, size_t length) { + static_assert(std::is_standard_layout<T>(), + "Given array does not consist of standard layout objects"); #if (__GNUC__ >= 5) || defined(__clang__) || defined(_MSC_VER) - static_assert(std::is_trivially_copyable<T>(), "Given array does not consist of trivially copyable objects"); + static_assert(std::is_trivially_copyable<T>(), + "Given array does not consist of trivially copyable objects"); #endif if (!IsOpen()) { @@ -210,11 +211,12 @@ public: } template <typename T> - size_t WriteArray(const T* data, size_t length) - { - static_assert(std::is_standard_layout<T>(), "Given array does not consist of standard layout objects"); + size_t WriteArray(const T* data, size_t length) { + static_assert(std::is_standard_layout<T>(), + "Given array does not consist of standard layout objects"); #if (__GNUC__ >= 5) || defined(__clang__) || defined(_MSC_VER) - static_assert(std::is_trivially_copyable<T>(), "Given array does not consist of trivially copyable objects"); + static_assert(std::is_trivially_copyable<T>(), + "Given array does not consist of trivially copyable objects"); #endif if (!IsOpen()) { @@ -229,27 +231,31 @@ public: return items_written; } - size_t ReadBytes(void* data, size_t length) - { + size_t ReadBytes(void* data, size_t length) { return ReadArray(reinterpret_cast<char*>(data), length); } - size_t WriteBytes(const void* data, size_t length) - { + size_t WriteBytes(const void* data, size_t length) { return WriteArray(reinterpret_cast<const char*>(data), length); } - template<typename T> + template <typename T> size_t WriteObject(const T& object) { static_assert(!std::is_pointer<T>::value, "Given object is a pointer"); return WriteArray(&object, 1); } - bool IsOpen() const { return nullptr != m_file; } + bool IsOpen() const { + return nullptr != m_file; + } // m_good is set to false when a read, write or other function fails - bool IsGood() const { return m_good; } - explicit operator bool() const { return IsGood(); } + bool IsGood() const { + return m_good; + } + explicit operator bool() const { + return IsGood(); + } bool Seek(s64 off, int origin); u64 Tell() const; @@ -258,19 +264,21 @@ public: bool Flush(); // clear error state - void Clear() { m_good = true; std::clearerr(m_file); } + void Clear() { + m_good = true; + std::clearerr(m_file); + } private: std::FILE* m_file = nullptr; bool m_good = true; }; -} // namespace +} // namespace // To deal with Windows being dumb at unicode: template <typename T> -void OpenFStream(T& fstream, const std::string& filename, std::ios_base::openmode openmode) -{ +void OpenFStream(T& fstream, const std::string& filename, std::ios_base::openmode openmode) { #ifdef _MSC_VER fstream.open(Common::UTF8ToTStr(filename).c_str(), openmode); #else |