Merge pull request #6493 from Morph1984/fs-nodiscard
common: fs: Miscellaneous changes
This commit is contained in:
commit
0308a2679e
|
@ -172,7 +172,7 @@ std::string ReadStringFromFile(const std::filesystem::path& path, FileType type)
|
||||||
|
|
||||||
size_t WriteStringToFile(const std::filesystem::path& path, FileType type,
|
size_t WriteStringToFile(const std::filesystem::path& path, FileType type,
|
||||||
std::string_view string) {
|
std::string_view string) {
|
||||||
if (!IsFile(path)) {
|
if (Exists(path) && !IsFile(path)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ size_t WriteStringToFile(const std::filesystem::path& path, FileType type,
|
||||||
|
|
||||||
size_t AppendStringToFile(const std::filesystem::path& path, FileType type,
|
size_t AppendStringToFile(const std::filesystem::path& path, FileType type,
|
||||||
std::string_view string) {
|
std::string_view string) {
|
||||||
if (!IsFile(path)) {
|
if (Exists(path) && !IsFile(path)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ void OpenFileStream(FileStream& file_stream, const Path& path, std::ios_base::op
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads an entire file at path and returns a string of the contents read from the file.
|
* Reads an entire file at path and returns a string of the contents read from the file.
|
||||||
* If the filesystem object at path is not a file, this function returns an empty string.
|
* If the filesystem object at path is not a regular file, this function returns an empty string.
|
||||||
*
|
*
|
||||||
* @param path Filesystem path
|
* @param path Filesystem path
|
||||||
* @param type File type
|
* @param type File type
|
||||||
|
@ -72,7 +72,8 @@ template <typename Path>
|
||||||
/**
|
/**
|
||||||
* Writes a string to a file at path and returns the number of characters successfully written.
|
* Writes a string to a file at path and returns the number of characters successfully written.
|
||||||
* If a file already exists at path, its contents will be erased.
|
* If a file already exists at path, its contents will be erased.
|
||||||
* If the filesystem object at path is not a file, this function returns 0.
|
* If a file does not exist at path, it creates and opens a new empty file for writing.
|
||||||
|
* If the filesystem object at path exists and is not a regular file, this function returns 0.
|
||||||
*
|
*
|
||||||
* @param path Filesystem path
|
* @param path Filesystem path
|
||||||
* @param type File type
|
* @param type File type
|
||||||
|
@ -95,7 +96,8 @@ template <typename Path>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appends a string to a file at path and returns the number of characters successfully written.
|
* Appends a string to a file at path and returns the number of characters successfully written.
|
||||||
* If the filesystem object at path is not a file, this function returns 0.
|
* If a file does not exist at path, it creates and opens a new empty file for appending.
|
||||||
|
* If the filesystem object at path exists and is not a regular file, this function returns 0.
|
||||||
*
|
*
|
||||||
* @param path Filesystem path
|
* @param path Filesystem path
|
||||||
* @param type File type
|
* @param type File type
|
||||||
|
@ -394,11 +396,11 @@ public:
|
||||||
[[nodiscard]] size_t WriteString(std::span<const char> string) const;
|
[[nodiscard]] size_t WriteString(std::span<const char> string) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flushes any unwritten buffered data into the file.
|
* Attempts to flush any unwritten buffered data into the file and flush the file into the disk.
|
||||||
*
|
*
|
||||||
* @returns True if the flush was successful, false otherwise.
|
* @returns True if the flush was successful, false otherwise.
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] bool Flush() const;
|
bool Flush() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resizes the file to a given size.
|
* Resizes the file to a given size.
|
||||||
|
|
|
@ -135,8 +135,9 @@ std::shared_ptr<IOFile> FileOpen(const fs::path& path, FileAccessMode mode, File
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!IsFile(path)) {
|
if (Exists(path) && !IsFile(path)) {
|
||||||
LOG_ERROR(Common_Filesystem, "Filesystem object at path={} is not a file",
|
LOG_ERROR(Common_Filesystem,
|
||||||
|
"Filesystem object at path={} exists and is not a regular file",
|
||||||
PathToUTF8String(path));
|
PathToUTF8String(path));
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,18 +48,18 @@ template <typename Path>
|
||||||
*
|
*
|
||||||
* Failures occur when:
|
* Failures occur when:
|
||||||
* - Input path is not valid
|
* - Input path is not valid
|
||||||
* - Filesystem object at path is not a file
|
* - Filesystem object at path is not a regular file
|
||||||
* - Filesystem at path is read only
|
* - Filesystem at path is read only
|
||||||
*
|
*
|
||||||
* @param path Filesystem path
|
* @param path Filesystem path
|
||||||
*
|
*
|
||||||
* @returns True if file removal succeeds or file does not exist, false otherwise.
|
* @returns True if file removal succeeds or file does not exist, false otherwise.
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] bool RemoveFile(const std::filesystem::path& path);
|
bool RemoveFile(const std::filesystem::path& path);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
template <typename Path>
|
template <typename Path>
|
||||||
[[nodiscard]] bool RemoveFile(const Path& path) {
|
bool RemoveFile(const Path& path) {
|
||||||
if constexpr (IsChar<typename Path::value_type>) {
|
if constexpr (IsChar<typename Path::value_type>) {
|
||||||
return RemoveFile(ToU8String(path));
|
return RemoveFile(ToU8String(path));
|
||||||
} else {
|
} else {
|
||||||
|
@ -74,7 +74,7 @@ template <typename Path>
|
||||||
* Failures occur when:
|
* Failures occur when:
|
||||||
* - One or both input path(s) is not valid
|
* - One or both input path(s) is not valid
|
||||||
* - Filesystem object at old_path does not exist
|
* - Filesystem object at old_path does not exist
|
||||||
* - Filesystem object at old_path is not a file
|
* - Filesystem object at old_path is not a regular file
|
||||||
* - Filesystem object at new_path exists
|
* - Filesystem object at new_path exists
|
||||||
* - Filesystem at either path is read only
|
* - Filesystem at either path is read only
|
||||||
*
|
*
|
||||||
|
@ -110,8 +110,8 @@ template <typename Path1, typename Path2>
|
||||||
*
|
*
|
||||||
* Failures occur when:
|
* Failures occur when:
|
||||||
* - Input path is not valid
|
* - Input path is not valid
|
||||||
* - Filesystem object at path is not a file
|
* - Filesystem object at path exists and is not a regular file
|
||||||
* - The file is not opened
|
* - The file is not open
|
||||||
*
|
*
|
||||||
* @param path Filesystem path
|
* @param path Filesystem path
|
||||||
* @param mode File access mode
|
* @param mode File access mode
|
||||||
|
@ -251,11 +251,11 @@ template <typename Path>
|
||||||
*
|
*
|
||||||
* @returns True if directory removal succeeds or directory does not exist, false otherwise.
|
* @returns True if directory removal succeeds or directory does not exist, false otherwise.
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] bool RemoveDir(const std::filesystem::path& path);
|
bool RemoveDir(const std::filesystem::path& path);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
template <typename Path>
|
template <typename Path>
|
||||||
[[nodiscard]] bool RemoveDir(const Path& path) {
|
bool RemoveDir(const Path& path) {
|
||||||
if constexpr (IsChar<typename Path::value_type>) {
|
if constexpr (IsChar<typename Path::value_type>) {
|
||||||
return RemoveDir(ToU8String(path));
|
return RemoveDir(ToU8String(path));
|
||||||
} else {
|
} else {
|
||||||
|
@ -276,11 +276,11 @@ template <typename Path>
|
||||||
*
|
*
|
||||||
* @returns True if the directory and all of its contents are removed successfully, false otherwise.
|
* @returns True if the directory and all of its contents are removed successfully, false otherwise.
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] bool RemoveDirRecursively(const std::filesystem::path& path);
|
bool RemoveDirRecursively(const std::filesystem::path& path);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
template <typename Path>
|
template <typename Path>
|
||||||
[[nodiscard]] bool RemoveDirRecursively(const Path& path) {
|
bool RemoveDirRecursively(const Path& path) {
|
||||||
if constexpr (IsChar<typename Path::value_type>) {
|
if constexpr (IsChar<typename Path::value_type>) {
|
||||||
return RemoveDirRecursively(ToU8String(path));
|
return RemoveDirRecursively(ToU8String(path));
|
||||||
} else {
|
} else {
|
||||||
|
@ -301,11 +301,11 @@ template <typename Path>
|
||||||
*
|
*
|
||||||
* @returns True if all of the directory's contents are removed successfully, false otherwise.
|
* @returns True if all of the directory's contents are removed successfully, false otherwise.
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] bool RemoveDirContentsRecursively(const std::filesystem::path& path);
|
bool RemoveDirContentsRecursively(const std::filesystem::path& path);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
template <typename Path>
|
template <typename Path>
|
||||||
[[nodiscard]] bool RemoveDirContentsRecursively(const Path& path) {
|
bool RemoveDirContentsRecursively(const Path& path) {
|
||||||
if constexpr (IsChar<typename Path::value_type>) {
|
if constexpr (IsChar<typename Path::value_type>) {
|
||||||
return RemoveDirContentsRecursively(ToU8String(path));
|
return RemoveDirContentsRecursively(ToU8String(path));
|
||||||
} else {
|
} else {
|
||||||
|
@ -435,11 +435,13 @@ template <typename Path>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether a filesystem object at path is a file.
|
* Returns whether a filesystem object at path is a regular file.
|
||||||
|
* A regular file is a file that stores text or binary data.
|
||||||
|
* It is not a directory, symlink, FIFO, socket, block device, or character device.
|
||||||
*
|
*
|
||||||
* @param path Filesystem path
|
* @param path Filesystem path
|
||||||
*
|
*
|
||||||
* @returns True if a filesystem object at path is a file, false otherwise.
|
* @returns True if a filesystem object at path is a regular file, false otherwise.
|
||||||
*/
|
*/
|
||||||
[[nodiscard]] bool IsFile(const std::filesystem::path& path);
|
[[nodiscard]] bool IsFile(const std::filesystem::path& path);
|
||||||
|
|
||||||
|
|
|
@ -159,7 +159,7 @@ FileBackend::FileBackend(const std::filesystem::path& filename) {
|
||||||
|
|
||||||
// Existence checks are done within the functions themselves.
|
// Existence checks are done within the functions themselves.
|
||||||
// We don't particularly care if these succeed or not.
|
// We don't particularly care if these succeed or not.
|
||||||
void(FS::RemoveFile(old_filename));
|
FS::RemoveFile(old_filename);
|
||||||
void(FS::RenameFile(filename, old_filename));
|
void(FS::RenameFile(filename, old_filename));
|
||||||
|
|
||||||
file =
|
file =
|
||||||
|
@ -186,7 +186,7 @@ void FileBackend::Write(const Entry& entry) {
|
||||||
|
|
||||||
bytes_written += file->WriteString(FormatLogMessage(entry).append(1, '\n'));
|
bytes_written += file->WriteString(FormatLogMessage(entry).append(1, '\n'));
|
||||||
if (entry.log_level >= Level::Error) {
|
if (entry.log_level >= Level::Error) {
|
||||||
void(file->Flush());
|
file->Flush();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,17 +24,12 @@ constexpr FS::FileAccessMode ModeFlagsToFileAccessMode(Mode mode) {
|
||||||
case Mode::Read:
|
case Mode::Read:
|
||||||
return FS::FileAccessMode::Read;
|
return FS::FileAccessMode::Read;
|
||||||
case Mode::Write:
|
case Mode::Write:
|
||||||
return FS::FileAccessMode::Write;
|
|
||||||
case Mode::ReadWrite:
|
case Mode::ReadWrite:
|
||||||
return FS::FileAccessMode::ReadWrite;
|
|
||||||
case Mode::Append:
|
case Mode::Append:
|
||||||
return FS::FileAccessMode::Append;
|
|
||||||
case Mode::ReadAppend:
|
case Mode::ReadAppend:
|
||||||
return FS::FileAccessMode::ReadAppend;
|
|
||||||
case Mode::WriteAppend:
|
case Mode::WriteAppend:
|
||||||
return FS::FileAccessMode::Append;
|
|
||||||
case Mode::All:
|
case Mode::All:
|
||||||
return FS::FileAccessMode::ReadAppend;
|
return FS::FileAccessMode::ReadWrite;
|
||||||
default:
|
default:
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
|
@ -313,7 +313,7 @@ void SynchronizeInternal(AM::Applets::AppletManager& applet_manager, DirectoryGe
|
||||||
LOG_ERROR(Service_BCAT, "Boxcat synchronization failed with error '{}'!", res);
|
LOG_ERROR(Service_BCAT, "Boxcat synchronization failed with error '{}'!", res);
|
||||||
|
|
||||||
if (res == DownloadResult::NoMatchBuildId || res == DownloadResult::NoMatchTitleId) {
|
if (res == DownloadResult::NoMatchBuildId || res == DownloadResult::NoMatchTitleId) {
|
||||||
void(Common::FS::RemoveFile(zip_path));
|
Common::FS::RemoveFile(zip_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
HandleDownloadDisplayResult(applet_manager, res);
|
HandleDownloadDisplayResult(applet_manager, res);
|
||||||
|
@ -445,7 +445,7 @@ std::optional<std::vector<u8>> Boxcat::GetLaunchParameter(TitleIDVersion title)
|
||||||
LOG_ERROR(Service_BCAT, "Boxcat synchronization failed with error '{}'!", res);
|
LOG_ERROR(Service_BCAT, "Boxcat synchronization failed with error '{}'!", res);
|
||||||
|
|
||||||
if (res == DownloadResult::NoMatchBuildId || res == DownloadResult::NoMatchTitleId) {
|
if (res == DownloadResult::NoMatchBuildId || res == DownloadResult::NoMatchTitleId) {
|
||||||
void(Common::FS::RemoveFile(bin_file_path));
|
Common::FS::RemoveFile(bin_file_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
HandleDownloadDisplayResult(applet_manager, res);
|
HandleDownloadDisplayResult(applet_manager, res);
|
||||||
|
|
|
@ -50,7 +50,7 @@ NsightAftermathTracker::NsightAftermathTracker() {
|
||||||
}
|
}
|
||||||
dump_dir = Common::FS::GetYuzuPath(Common::FS::YuzuPath::LogDir) / "gpucrash";
|
dump_dir = Common::FS::GetYuzuPath(Common::FS::YuzuPath::LogDir) / "gpucrash";
|
||||||
|
|
||||||
void(Common::FS::RemoveDirRecursively(dump_dir));
|
Common::FS::RemoveDirRecursively(dump_dir);
|
||||||
if (!Common::FS::CreateDir(dump_dir)) {
|
if (!Common::FS::CreateDir(dump_dir)) {
|
||||||
LOG_ERROR(Render_Vulkan, "Failed to create Nsight Aftermath dump directory");
|
LOG_ERROR(Render_Vulkan, "Failed to create Nsight Aftermath dump directory");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -79,8 +79,8 @@ void ConfigurePerGameAddons::ApplyConfiguration() {
|
||||||
std::sort(disabled_addons.begin(), disabled_addons.end());
|
std::sort(disabled_addons.begin(), disabled_addons.end());
|
||||||
std::sort(current.begin(), current.end());
|
std::sort(current.begin(), current.end());
|
||||||
if (disabled_addons != current) {
|
if (disabled_addons != current) {
|
||||||
void(Common::FS::RemoveFile(Common::FS::GetYuzuPath(Common::FS::YuzuPath::CacheDir) /
|
Common::FS::RemoveFile(Common::FS::GetYuzuPath(Common::FS::YuzuPath::CacheDir) /
|
||||||
"game_list" / fmt::format("{:016X}.pv.txt", title_id)));
|
"game_list" / fmt::format("{:016X}.pv.txt", title_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
Settings::values.disabled_addons[title_id] = disabled_addons;
|
Settings::values.disabled_addons[title_id] = disabled_addons;
|
||||||
|
|
|
@ -194,10 +194,10 @@ static void RemoveCachedContents() {
|
||||||
const auto offline_legal_information = cache_dir / "offline_web_applet_legal_information";
|
const auto offline_legal_information = cache_dir / "offline_web_applet_legal_information";
|
||||||
const auto offline_system_data = cache_dir / "offline_web_applet_system_data";
|
const auto offline_system_data = cache_dir / "offline_web_applet_system_data";
|
||||||
|
|
||||||
void(Common::FS::RemoveDirRecursively(offline_fonts));
|
Common::FS::RemoveDirRecursively(offline_fonts);
|
||||||
void(Common::FS::RemoveDirRecursively(offline_manual));
|
Common::FS::RemoveDirRecursively(offline_manual);
|
||||||
void(Common::FS::RemoveDirRecursively(offline_legal_information));
|
Common::FS::RemoveDirRecursively(offline_legal_information);
|
||||||
void(Common::FS::RemoveDirRecursively(offline_system_data));
|
Common::FS::RemoveDirRecursively(offline_system_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
GMainWindow::GMainWindow()
|
GMainWindow::GMainWindow()
|
||||||
|
@ -1743,8 +1743,8 @@ void GMainWindow::OnGameListRemoveInstalledEntry(u64 program_id, InstalledEntryT
|
||||||
RemoveAddOnContent(program_id, entry_type);
|
RemoveAddOnContent(program_id, entry_type);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
void(Common::FS::RemoveDirRecursively(Common::FS::GetYuzuPath(Common::FS::YuzuPath::CacheDir) /
|
Common::FS::RemoveDirRecursively(Common::FS::GetYuzuPath(Common::FS::YuzuPath::CacheDir) /
|
||||||
"game_list"));
|
"game_list");
|
||||||
game_list->PopulateAsync(UISettings::values.game_dirs);
|
game_list->PopulateAsync(UISettings::values.game_dirs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2213,8 +2213,8 @@ void GMainWindow::OnMenuInstallToNAND() {
|
||||||
: tr("%n file(s) failed to install\n", "", failed_files.size()));
|
: tr("%n file(s) failed to install\n", "", failed_files.size()));
|
||||||
|
|
||||||
QMessageBox::information(this, tr("Install Results"), install_results);
|
QMessageBox::information(this, tr("Install Results"), install_results);
|
||||||
void(Common::FS::RemoveDirRecursively(Common::FS::GetYuzuPath(Common::FS::YuzuPath::CacheDir) /
|
Common::FS::RemoveDirRecursively(Common::FS::GetYuzuPath(Common::FS::YuzuPath::CacheDir) /
|
||||||
"game_list"));
|
"game_list");
|
||||||
game_list->PopulateAsync(UISettings::values.game_dirs);
|
game_list->PopulateAsync(UISettings::values.game_dirs);
|
||||||
ui.action_Install_File_NAND->setEnabled(true);
|
ui.action_Install_File_NAND->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
@ -2846,7 +2846,7 @@ void GMainWindow::MigrateConfigFiles() {
|
||||||
LOG_INFO(Frontend, "Migrating config file from {} to {}", origin, destination);
|
LOG_INFO(Frontend, "Migrating config file from {} to {}", origin, destination);
|
||||||
if (!Common::FS::RenameFile(origin, destination)) {
|
if (!Common::FS::RenameFile(origin, destination)) {
|
||||||
// Delete the old config file if one already exists in the new location.
|
// Delete the old config file if one already exists in the new location.
|
||||||
void(Common::FS::RemoveFile(origin));
|
Common::FS::RemoveFile(origin);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3040,9 +3040,9 @@ void GMainWindow::OnReinitializeKeys(ReinitializeKeyBehavior behavior) {
|
||||||
|
|
||||||
const auto keys_dir = Common::FS::GetYuzuPath(Common::FS::YuzuPath::KeysDir);
|
const auto keys_dir = Common::FS::GetYuzuPath(Common::FS::YuzuPath::KeysDir);
|
||||||
|
|
||||||
void(Common::FS::RemoveFile(keys_dir / "prod.keys_autogenerated"));
|
Common::FS::RemoveFile(keys_dir / "prod.keys_autogenerated");
|
||||||
void(Common::FS::RemoveFile(keys_dir / "console.keys_autogenerated"));
|
Common::FS::RemoveFile(keys_dir / "console.keys_autogenerated");
|
||||||
void(Common::FS::RemoveFile(keys_dir / "title.keys_autogenerated"));
|
Common::FS::RemoveFile(keys_dir / "title.keys_autogenerated");
|
||||||
}
|
}
|
||||||
|
|
||||||
Core::Crypto::KeyManager& keys = Core::Crypto::KeyManager::Instance();
|
Core::Crypto::KeyManager& keys = Core::Crypto::KeyManager::Instance();
|
||||||
|
|
Loading…
Reference in New Issue