diff options
author | jeanluc@chromium.org <jeanluc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-27 19:55:53 +0000 |
---|---|---|
committer | jeanluc@chromium.org <jeanluc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-27 19:55:53 +0000 |
commit | d7935f1fd8d0836feab3c401194ec103e13e9731 (patch) | |
tree | 380b01c55564dc0d040d06bbf2156cedfe86ddce /chrome/browser/sessions/session_backend.cc | |
parent | c6bc0bd23f6bcfbebc901bdaa1cfe5bb62cdb142 (diff) | |
download | chromium_src-d7935f1fd8d0836feab3c401194ec103e13e9731.zip chromium_src-d7935f1fd8d0836feab3c401194ec103e13e9731.tar.gz chromium_src-d7935f1fd8d0836feab3c401194ec103e13e9731.tar.bz2 |
Create a Header struct to define the structure of the file header in just one place. Previously, knowledge of the format of that header was found in three places (2 in the .cc and 1 in .h).
Also, it fixes a warning/error in Visual Studio 2010.
BUG=70995
TEST=session_backend_unittest
Review URL: http://codereview.chromium.org/6366020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72867 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/sessions/session_backend.cc')
-rw-r--r-- | chrome/browser/sessions/session_backend.cc | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/chrome/browser/sessions/session_backend.cc b/chrome/browser/sessions/session_backend.cc index f5a0c39..314e427 100644 --- a/chrome/browser/sessions/session_backend.cc +++ b/chrome/browser/sessions/session_backend.cc @@ -21,6 +21,13 @@ static const int32 kFileSignature = 0x53534E53; namespace { +// The file header is the first bytes written to the file, +// and is used to identify the file as one written by us. +struct FileHeader { + int32 signature; + int32 version; +}; + // SessionFileReader ---------------------------------------------------------- // SessionFileReader is responsible for reading the set of SessionCommands that @@ -81,13 +88,13 @@ bool SessionFileReader::Read(BaseSessionService::SessionType type, std::vector<SessionCommand*>* commands) { if (!file_->IsOpen()) return false; - int32 header[2]; + FileHeader header; int read_count; TimeTicks start_time = TimeTicks::Now(); read_count = file_->ReadUntilComplete(reinterpret_cast<char*>(&header), sizeof(header)); - if (read_count != sizeof(header) || header[0] != kFileSignature || - header[1] != kFileCurrentVersion) + if (read_count != sizeof(header) || header.signature != kFileSignature || + header.version != kFileCurrentVersion) return false; ScopedVector<SessionCommand> read_commands; @@ -346,7 +353,8 @@ void SessionBackend::ResetFile() { // reopening to avoid the possibility of scanners locking the file out // from under us once we close it. If truncation fails, we'll try to // recreate. - if (current_session_file_->Truncate(sizeof_header()) != sizeof_header()) + const int header_size = static_cast<int>(sizeof(FileHeader)); + if (current_session_file_->Truncate(header_size) != header_size) current_session_file_.reset(NULL); } if (!current_session_file_.get()) @@ -362,12 +370,12 @@ net::FileStream* SessionBackend::OpenAndWriteHeader(const FilePath& path) { base::PLATFORM_FILE_EXCLUSIVE_READ); if (!file->IsOpen()) return NULL; - int32 header[2]; - header[0] = kFileSignature; - header[1] = kFileCurrentVersion; + FileHeader header; + header.signature = kFileSignature; + header.version = kFileCurrentVersion; int wrote = file->Write(reinterpret_cast<char*>(&header), sizeof(header), NULL); - if (wrote != sizeof_header()) + if (wrote != sizeof(header)) return NULL; return file.release(); } |