summaryrefslogtreecommitdiff
path: root/src/common/file_util.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/file_util.h')
-rw-r--r--src/common/file_util.h64
1 files changed, 44 insertions, 20 deletions
diff --git a/src/common/file_util.h b/src/common/file_util.h
index 0871734d4..173ce6623 100644
--- a/src/common/file_util.h
+++ b/src/common/file_util.h
@@ -4,11 +4,12 @@
#pragma once
+#include <array>
#include <fstream>
#include <cstdio>
+#include <cstring>
#include <string>
#include <vector>
-#include <string.h>
#include "common/common.h"
#include "common/string_util.h"
@@ -25,6 +26,7 @@ enum {
D_SHADERS_IDX,
D_STATESAVES_IDX,
D_SCREENSHOTS_IDX,
+ D_SDMC_IDX,
D_HIRESTEXTURES_IDX,
D_DUMP_IDX,
D_DUMPFRAMES_IDX,
@@ -43,10 +45,10 @@ enum {
NUM_PATH_INDICES
};
-namespace File
+namespace FileUtil
{
-// FileSystem tree node/
+// FileSystem tree node/
struct FSTEntry
{
bool isDirectory;
@@ -84,13 +86,13 @@ bool Delete(const std::string &filename);
// Deletes a directory filename, returns true on success
bool DeleteDir(const std::string &filename);
-// renames file srcFilename to destFilename, returns true on success
+// renames file srcFilename to destFilename, returns true on success
bool Rename(const std::string &srcFilename, const std::string &destFilename);
-// copies file srcFilename to destFilename, returns true on success
+// copies file srcFilename to destFilename, returns true on success
bool Copy(const std::string &srcFilename, const std::string &destFilename);
-// creates an empty file filename, returns true on success
+// creates an empty file filename, returns true on success
bool CreateEmptyFile(const std::string &filename);
// Scans the directory tree gets, starting from _Directory and adds the
@@ -109,7 +111,7 @@ 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);
-// Returns a pointer to a string with a Dolphin data dir in the user's home
+// 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="");
@@ -127,8 +129,18 @@ std::string GetBundleDirectory();
std::string &GetExeDirectory();
#endif
-bool WriteStringToFile(bool text_file, const std::string &str, const char *filename);
-bool 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
+ * Loosely implemented following https://en.wikipedia.org/wiki/8.3_filename
+ * @param filename The normal filename to use
+ * @param short_name A 9-char array in which the short name will be written
+ * @param extension A 4-char array in which the extension will be written
+ */
+void SplitFilename83(const std::string& filename, std::array<char, 9>& short_name,
+ std::array<char, 4>& extension);
// simple wrapper for cstdlib file functions to
// hopefully will make error checking easier
@@ -141,39 +153,51 @@ public:
IOFile(const std::string& filename, const char openmode[]);
~IOFile();
-
+
IOFile(IOFile&& other);
IOFile& operator=(IOFile&& other);
-
+
void Swap(IOFile& other);
bool Open(const std::string& filename, const char openmode[]);
bool Close();
template <typename T>
- bool ReadArray(T* data, size_t length)
+ size_t ReadArray(T* data, size_t length)
{
- if (!IsOpen() || length != std::fread(data, sizeof(T), length, m_file))
+ if (!IsOpen()) {
m_good = false;
+ return -1;
+ }
- return m_good;
+ size_t items_read = std::fread(data, sizeof(T), length, m_file);
+ if (items_read != length)
+ m_good = false;
+
+ return items_read;
}
template <typename T>
- bool WriteArray(const T* data, size_t length)
+ size_t WriteArray(const T* data, size_t length)
{
- if (!IsOpen() || length != std::fwrite(data, sizeof(T), length, m_file))
+ if (!IsOpen()) {
+ m_good = false;
+ return -1;
+ }
+
+ size_t items_written = std::fwrite(data, sizeof(T), length, m_file);
+ if (items_written != length)
m_good = false;
- return m_good;
+ return items_written;
}
- bool ReadBytes(void* data, size_t length)
+ size_t ReadBytes(void* data, size_t length)
{
return ReadArray(reinterpret_cast<char*>(data), length);
}
- bool WriteBytes(const void* data, size_t length)
+ size_t WriteBytes(const void* data, size_t length)
{
return WriteArray(reinterpret_cast<const char*>(data), length);
}
@@ -213,7 +237,7 @@ template <typename T>
void OpenFStream(T& fstream, const std::string& filename, std::ios_base::openmode openmode)
{
#ifdef _WIN32
- fstream.open(UTF8ToTStr(filename).c_str(), openmode);
+ fstream.open(Common::UTF8ToTStr(filename).c_str(), openmode);
#else
fstream.open(filename.c_str(), openmode);
#endif