From a1b694a50bba31ac77da68ecc059e96aeedeb7b7 Mon Sep 17 00:00:00 2001 From: Martchus Date: Wed, 3 Jul 2019 23:59:07 +0200 Subject: [PATCH] Allow creating a new file in PasswordFile::save() to ease saving a file under a different location --- io/passwordfile.cpp | 10 +++++++++- io/passwordfile.h | 3 ++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/io/passwordfile.cpp b/io/passwordfile.cpp index 22d8b0c..5beb316 100644 --- a/io/passwordfile.cpp +++ b/io/passwordfile.cpp @@ -405,7 +405,15 @@ void PasswordFile::save(PasswordFileSaveFlags options) if (m_file.is_open()) { m_file.close(); } - m_file.open(m_path, ios_base::in | ios_base::out | ios_base::trunc | ios_base::binary); + try { + m_file.open(m_path, ios_base::in | ios_base::out | ios_base::trunc | ios_base::binary); + } catch (const ios_base::failure &) { + // try to create a new file if configured via \a options + if (!(options & PasswordFileSaveFlags::AllowToCreateNewFile)) { + throw; + } + m_file.open(m_path, ios_base::out | ios_base::trunc | ios_base::binary); + } } write(options); diff --git a/io/passwordfile.h b/io/passwordfile.h index 179be56..e10041f 100644 --- a/io/passwordfile.h +++ b/io/passwordfile.h @@ -48,7 +48,8 @@ enum class PasswordFileSaveFlags : std::uint64_t { Encryption = 1, Compression = 2, PasswordHashing = 4, - Default = Encryption | Compression | PasswordHashing, + AllowToCreateNewFile = 8, + Default = Encryption | Compression | PasswordHashing | AllowToCreateNewFile, }; std::string PASSWORD_FILE_EXPORT flagsToString(PasswordFileSaveFlags flags);