diff options
Diffstat (limited to 'db.go')
-rw-r--r-- | db.go | 23 |
1 files changed, 16 insertions, 7 deletions
@@ -91,11 +91,11 @@ func (db *DB) Open(path string, mode os.FileMode) error { // Read the first meta page to determine the page size. var buf [minPageSize]byte if _, err := db.file.ReadAt(buf[:], 0); err == nil { - if m, err := db.pageInBuffer(buf[:], 0).meta(); err != nil { - return &Error{"meta bootstrap error", err} - } else if m != nil { - db.pageSize = int(m.pageSize) + m := db.pageInBuffer(buf[:], 0).meta() + if err := m.validate(); err != nil { + return &Error{"meta error", err} } + db.pageSize = int(m.pageSize) } } @@ -126,10 +126,14 @@ func (db *DB) mmap() error { } // Save references to the meta pages. - if db.meta0, err = db.page(0).meta(); err != nil { + db.meta0 = db.page(0).meta() + db.meta1 = db.page(1).meta() + + // Validate the meta pages. + if err := db.meta0.validate(); err != nil { return &Error{"meta0 error", err} } - if db.meta1, err = db.page(1).meta(); err != nil { + if err := db.meta1.validate(); err != nil { return &Error{"meta1 error", err} } @@ -146,7 +150,12 @@ func (db *DB) init() error { for i := 0; i < 2; i++ { p := db.pageInBuffer(buf[:], pgid(i)) p.id = pgid(i) - p.init(db.pageSize) + p.flags = p_meta + + m := p.meta() + m.magic = magic + m.version = Version + m.pageSize = uint32(db.pageSize) } // Write the buffer to our data file. |