checkJournal verifies the journal header
(journal []byte, skipMaxChunks bool)
| 176 | |
| 177 | // checkJournal verifies the journal header |
| 178 | func (s *Storage) checkJournal(journal []byte, skipMaxChunks bool) bool { |
| 179 | h := (*journalHeader)(unsafe.Pointer(&journal[0])) |
| 180 | // check magic bytes / endianess mismatch ('PD' vs 'DP') |
| 181 | if h.magic != journalMagic { |
| 182 | Log.Debugf("Journal magic mismatch: %v != %v", h.magic, journalMagic) |
| 183 | return false |
| 184 | } |
| 185 | checksum := crc32.Checksum(journal[:12], crc32Table) |
| 186 | if h.checksum != checksum { |
| 187 | Log.Debugf("Journal checksum mismatch: %08X != %08X", h.checksum, checksum) |
| 188 | return false |
| 189 | } |
| 190 | if h.version != journalVersion { |
| 191 | Log.Debugf("Journal version mismatch: %v != %v", h.version, journalVersion) |
| 192 | return false |
| 193 | } |
| 194 | if h.headerSize != uint8(headerSize) { |
| 195 | Log.Debugf("Journal chunk header size mismatch: %v != %v", h.headerSize, headerSize) |
| 196 | return false |
| 197 | } |
| 198 | if !skipMaxChunks && h.maxChunks != uint32(s.MaxChunks) { |
| 199 | Log.Debugf("Journal max chunks mismatch: %v != %v", h.maxChunks, s.MaxChunks) |
| 200 | return false |
| 201 | } |
| 202 | if h.chunkSize != uint32(s.ChunkSize) { |
| 203 | Log.Debugf("Journal chunk size mismatch: %v != %v", h.chunkSize, s.ChunkSize) |
| 204 | return false |
| 205 | } |
| 206 | Log.Debug("Journal is valid") |
| 207 | return true |
| 208 | } |
| 209 | |
| 210 | // initJournal initializes the journal |
| 211 | func (s *Storage) initJournal(journal []byte) { |
no outgoing calls
no test coverage detected