Index: net/disk_cache/addr.cc |
=================================================================== |
--- net/disk_cache/addr.cc (revision 205902) |
+++ net/disk_cache/addr.cc (working copy) |
@@ -6,6 +6,16 @@ |
#include "base/logging.h" |
+namespace { |
+ |
+bool AreReservedBitsValid(uint32 value) { |
gavinp
2013/06/16 23:44:15
Make this an inline getter.
|
+ // These two bits of a block address should not be set. |
+ const uint32 kReservedBitsMask = 0x0c000000; |
gavinp
2013/06/16 23:44:15
Move this into the header.
|
+ return !(value & kReservedBitsMask); |
+} |
+ |
+} // namespace |
+ |
namespace disk_cache { |
int Addr::start_block() const { |
@@ -26,22 +36,35 @@ |
return true; |
} |
-bool Addr::SanityCheck() const { |
+bool Addr::SanityCheckV2() const { |
if (!is_initialized()) |
return !value_; |
- if (((value_ & kFileTypeMask) >> kFileTypeOffset) > 4) |
+ if (file_type() > BLOCK_4K) |
return false; |
if (is_separate_file()) |
return true; |
- const uint32 kReservedBitsMask = 0x0c000000; |
- return !(value_ & kReservedBitsMask); |
+ return AreReservedBitsValid(value_); |
} |
+bool Addr::SanityCheckV3() const { |
+ if (!is_initialized()) |
+ return !value_; |
+ |
+ // For actual entries, SanityCheckForEntryV3 should be used. |
+ if (file_type() > BLOCK_FILES) |
+ return false; |
+ |
+ if (is_separate_file()) |
+ return true; |
+ |
+ return AreReservedBitsValid(value_); |
+} |
+ |
bool Addr::SanityCheckForEntryV2() const { |
- if (!SanityCheck() || !is_initialized()) |
+ if (!SanityCheckV2() || !is_initialized()) |
return false; |
if (is_separate_file() || file_type() != BLOCK_256) |
@@ -50,8 +73,24 @@ |
return true; |
} |
+bool Addr::SanityCheckForEntryV3() const { |
+ if (!is_initialized()) |
+ return false; |
+ |
+ if (!AreReservedBitsValid(value_)) |
+ return false; |
+ |
+ if (file_type() != BLOCK_ENTRIES && file_type() != BLOCK_EVICTED) |
+ return false; |
+ |
+ if (num_blocks() != 1) |
+ return false; |
+ |
+ return true; |
+} |
+ |
bool Addr::SanityCheckForRankings() const { |
- if (!SanityCheck() || !is_initialized()) |
+ if (!SanityCheckV2() || !is_initialized()) |
return false; |
if (is_separate_file() || file_type() != RANKINGS || num_blocks() != 1) |