improve tox file saving, making it resiliant to save file corruptions
Some checks failed
ContinuousDelivery / linux-ubuntu (push) Has been cancelled
ContinuousDelivery / android (map[ndk_abi:arm64-v8a vcpkg_toolkit:arm64-android-23]) (push) Has been cancelled
ContinuousDelivery / android (map[ndk_abi:armeabi-v7a vcpkg_toolkit:arm-neon-android-23]) (push) Has been cancelled
ContinuousDelivery / android (map[ndk_abi:x86_64 vcpkg_toolkit:x64-android-23]) (push) Has been cancelled
ContinuousDelivery / windows (push) Has been cancelled
ContinuousDelivery / windows-asan (push) Has been cancelled
ContinuousDelivery / dumpsyms (push) Has been cancelled
ContinuousDelivery / release (push) Has been cancelled
ContinuousIntegration / linux (push) Has been cancelled
ContinuousIntegration / linux-arm (push) Has been cancelled
ContinuousIntegration / android (map[ndk_abi:arm64-v8a vcpkg_toolkit:arm64-android-23]) (push) Has been cancelled
ContinuousIntegration / android (map[ndk_abi:armeabi-v7a vcpkg_toolkit:arm-neon-android-23]) (push) Has been cancelled
ContinuousIntegration / android (map[ndk_abi:x86_64 vcpkg_toolkit:x64-android-23]) (push) Has been cancelled
ContinuousIntegration / macos (push) Has been cancelled
ContinuousIntegration / windows (push) Has been cancelled
Some checks failed
ContinuousDelivery / linux-ubuntu (push) Has been cancelled
ContinuousDelivery / android (map[ndk_abi:arm64-v8a vcpkg_toolkit:arm64-android-23]) (push) Has been cancelled
ContinuousDelivery / android (map[ndk_abi:armeabi-v7a vcpkg_toolkit:arm-neon-android-23]) (push) Has been cancelled
ContinuousDelivery / android (map[ndk_abi:x86_64 vcpkg_toolkit:x64-android-23]) (push) Has been cancelled
ContinuousDelivery / windows (push) Has been cancelled
ContinuousDelivery / windows-asan (push) Has been cancelled
ContinuousDelivery / dumpsyms (push) Has been cancelled
ContinuousDelivery / release (push) Has been cancelled
ContinuousIntegration / linux (push) Has been cancelled
ContinuousIntegration / linux-arm (push) Has been cancelled
ContinuousIntegration / android (map[ndk_abi:arm64-v8a vcpkg_toolkit:arm64-android-23]) (push) Has been cancelled
ContinuousIntegration / android (map[ndk_abi:armeabi-v7a vcpkg_toolkit:arm-neon-android-23]) (push) Has been cancelled
ContinuousIntegration / android (map[ndk_abi:x86_64 vcpkg_toolkit:x64-android-23]) (push) Has been cancelled
ContinuousIntegration / macos (push) Has been cancelled
ContinuousIntegration / windows (push) Has been cancelled
This commit is contained in:
@@ -10,12 +10,14 @@
|
||||
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
#include <filesystem>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <cassert>
|
||||
|
||||
static void eee(std::string& mod) {
|
||||
for (char& c : mod) {
|
||||
c ^= 0x59;
|
||||
c ^= 0x37;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,12 +220,29 @@ void ToxClient::saveToxProfile(void) {
|
||||
}
|
||||
eee(_tox_profile_password);
|
||||
}
|
||||
std::ofstream ofile{_tox_profile_path, std::ios::binary};
|
||||
// TODO: improve
|
||||
for (const auto& ch : data) {
|
||||
ofile.put(ch);
|
||||
|
||||
std::filesystem::path tmp_path = _tox_profile_path + ".tmp";
|
||||
tmp_path.replace_filename("." + tmp_path.filename().generic_u8string());
|
||||
|
||||
try {
|
||||
std::ofstream ofile{tmp_path, std::ios::binary};
|
||||
ofile.write(reinterpret_cast<const char*>(data.data()), data.size());
|
||||
if (!ofile.good()) {
|
||||
// TODO: maybe enable fstream exceptions instead?
|
||||
throw std::runtime_error("write error");
|
||||
}
|
||||
} catch (...) {
|
||||
std::filesystem::remove(tmp_path);
|
||||
std::cerr << "TOX saving failed!\n";
|
||||
_save_heat = 10.f;
|
||||
return;
|
||||
}
|
||||
|
||||
std::filesystem::rename(
|
||||
tmp_path,
|
||||
_tox_profile_path
|
||||
);
|
||||
|
||||
_tox_profile_dirty = false;
|
||||
_save_heat = 10.f;
|
||||
}
|
||||
|
Reference in New Issue
Block a user