Merge pull request #2891

3f24e901 wallet2: don't write a .new file when not needed (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2017-12-25 21:14:20 +02:00
commit 2ef299f2a9
No known key found for this signature in database
GPG Key ID: 55432DF31CCD4FCD

View File

@ -3504,14 +3504,6 @@ void wallet2::store_to(const std::string &path, const epee::wipeable_string &pas
const std::string old_keys_file = m_keys_file; const std::string old_keys_file = m_keys_file;
const std::string old_address_file = m_wallet_file + ".address.txt"; const std::string old_address_file = m_wallet_file + ".address.txt";
// save to new file
std::ofstream ostr;
ostr.open(new_file, std::ios_base::binary | std::ios_base::out | std::ios_base::trunc);
binary_archive<true> oar(ostr);
bool success = ::serialization::serialize(oar, cache_file_data);
ostr.close();
THROW_WALLET_EXCEPTION_IF(!success || !ostr.good(), error::file_save_error, new_file);
// save keys to the new file // save keys to the new file
// if we here, main wallet file is saved and we only need to save keys and address files // if we here, main wallet file is saved and we only need to save keys and address files
if (!same_file) { if (!same_file) {
@ -3538,6 +3530,14 @@ void wallet2::store_to(const std::string &path, const epee::wipeable_string &pas
LOG_ERROR("error removing file: " << old_address_file); LOG_ERROR("error removing file: " << old_address_file);
} }
} else { } else {
// save to new file
std::ofstream ostr;
ostr.open(new_file, std::ios_base::binary | std::ios_base::out | std::ios_base::trunc);
binary_archive<true> oar(ostr);
bool success = ::serialization::serialize(oar, cache_file_data);
ostr.close();
THROW_WALLET_EXCEPTION_IF(!success || !ostr.good(), error::file_save_error, new_file);
// here we have "*.new" file, we need to rename it to be without ".new" // here we have "*.new" file, we need to rename it to be without ".new"
std::error_code e = tools::replace_file(new_file, m_wallet_file); std::error_code e = tools::replace_file(new_file, m_wallet_file);
THROW_WALLET_EXCEPTION_IF(e, error::file_save_error, m_wallet_file, e); THROW_WALLET_EXCEPTION_IF(e, error::file_save_error, m_wallet_file, e);