diff options
author | Lee Clagett <code@leeclagett.com> | 2017-08-30 00:05:36 -0400 |
---|---|---|
committer | Lee Clagett <code@leeclagett.com> | 2017-08-30 17:39:59 -0400 |
commit | 9c83f8063d799cd5209e05ec2286d0fecaa67bb7 (patch) | |
tree | 94e355760b3c241392cdb31cdec7cc8fd6a18dd0 /src/common/util.h | |
parent | Merge pull request #2311 (diff) | |
download | monero-9c83f8063d799cd5209e05ec2286d0fecaa67bb7.tar.xz |
Do not create file when RPC user/pass is given and use file locking
Diffstat (limited to '')
-rw-r--r-- | src/common/util.h | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/common/util.h b/src/common/util.h index 2452bc9d5..48bdbbc28 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -60,8 +60,30 @@ namespace tools } }; - //! \return File only readable by owner. nullptr if `filename` exists. - std::unique_ptr<std::FILE, close_file> create_private_file(const std::string& filename); + //! A file restricted to process owner AND process. Deletes file on destruction. + class private_file { + std::unique_ptr<std::FILE, close_file> m_handle; + std::string m_filename; + + private_file(std::FILE* handle, std::string&& filename) noexcept; + public: + + //! `handle() == nullptr && filename.empty()`. + private_file() noexcept; + + /*! \return File only readable by owner and only used by this process + OR `private_file{}` on error. */ + static private_file create(std::string filename); + + private_file(private_file&&) = default; + private_file& operator=(private_file&&) = default; + + //! Deletes `filename()` and closes `handle()`. + ~private_file() noexcept; + + std::FILE* handle() const noexcept { return m_handle.get(); } + const std::string& filename() const noexcept { return m_filename; } + }; /*! \brief Returns the default data directory. * |