aboutsummaryrefslogtreecommitdiff
path: root/db.go
diff options
context:
space:
mode:
Diffstat (limited to 'db.go')
-rw-r--r--db.go23
1 files changed, 16 insertions, 7 deletions
diff --git a/db.go b/db.go
index 275c4f5..bca4d56 100644
--- a/db.go
+++ b/db.go
@@ -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.