Chromium Code Reviews| Index: client/settings.h |
| diff --git a/client/settings.h b/client/settings.h |
| index bab5186a5351374f5c0449a54c6cd61605b56d95..f528bc1c6659dd959c0ec60eb0f17749fb26ad98 100644 |
| --- a/client/settings.h |
| +++ b/client/settings.h |
| @@ -21,6 +21,7 @@ |
| #include "base/basictypes.h" |
| #include "base/files/file_path.h" |
| +#include "base/move.h" |
| #include "util/file/file_io.h" |
| #include "util/misc/initialization_state_dcheck.h" |
| #include "util/misc/uuid.h" |
| @@ -95,13 +96,37 @@ class Settings { |
| private: |
| struct Data; |
| + class ScopedLockedFileHandle { |
|
Robert Sesek
2015/04/01 15:08:26
Can you use ScopedGeneric for this? It should hand
scottmg
2015/04/01 19:32:10
Done.
|
| + MOVE_ONLY_TYPE_WITH_MOVE_CONSTRUCTOR_FOR_CPP_03(ScopedLockedFileHandle) |
| + |
| + public: |
| + ScopedLockedFileHandle(); |
| + ScopedLockedFileHandle(FileHandle file, FileLocking locking); |
| + ScopedLockedFileHandle(ScopedLockedFileHandle&& rvalue) |
| + : handle_(rvalue.handle_.release()) {} |
| + ScopedLockedFileHandle& operator=(ScopedLockedFileHandle&& rvalue) { |
| + handle_.reset(rvalue.handle_.release()); |
| + return *this; |
| + } |
| + ~ScopedLockedFileHandle(); |
| + |
| + FileHandle get() { return handle_.get(); } |
| + bool is_valid() const { return handle_.is_valid(); } |
| + void reset(); |
| + |
| + private: |
| + void FreeIfNecessary(); |
| + |
| + ScopedFileHandle handle_; |
| + }; |
| + |
| // Opens the settings file for reading. On error, logs a message and returns |
| // the invalid handle. |
| - ScopedFileHandle OpenForReading(); |
| + ScopedLockedFileHandle OpenForReading(); |
| // Opens the settings file for reading and writing. On error, logs a message |
| // and returns the invalid handle. |
| - ScopedFileHandle OpenForReadingAndWriting(); |
| + ScopedLockedFileHandle OpenForReadingAndWriting(); |
| // Opens the settings file and reads the data. If that fails, an error will |
| // be logged and the settings will be recovered and re-initialized. If that |
| @@ -111,7 +136,7 @@ class Settings { |
| // Opens the settings file for writing and reads the data. If reading fails, |
| // recovery is attempted. Returns the opened file handle on success, or the |
| // invalid file handle on failure, with an error logged. |
| - ScopedFileHandle OpenForWritingAndReadSettings(Data* out_data); |
| + ScopedLockedFileHandle OpenForWritingAndReadSettings(Data* out_data); |
| // Reads the settings from |handle|. Logs an error and returns false on |
| // failure. This does not perform recovery. |